I am using epplus library to read/write an excel file. My program writes data to excel file every X seconds (automatically write to excel).
And a few days ago, when the number of data in excel up to approximately 2800, my excel file was deleted, I don't know why. I know because my program give me exception message, and I check my excel file was deleted.
Then I read epplus source code, there is a procedure to remove excel file in my opinion. This is the sample code
public void Save()
{
try
{
Workbook.Save();
if (File == null)
{
if(Encryption.IsEncrypted)
{
#if !MONO
var ms = new MemoryStream();
_package.Save(ms);
byte[] file = ms.ToArray();
EncryptedPackageHandler eph = new EncryptedPackageHandler();
var msEnc = eph.EncryptPackage(file, Encryption);
CopyStream(msEnc, ref _stream);
#endif
#if MONO
throw new NotSupportedException("Encryption is not supported under Mono.");
#endif
}
else
{
_package.Save(_stream);
}
_stream.Flush();
_package.Close();
}
else
{
if (System.IO.File.Exists(File.FullName))
{
try
{
System.IO.File.Delete(File.FullName);
}
catch (Exception ex)
{
throw (new Exception(string.Format("Error overwriting file {0}", File.FullName), ex));
}
}
_package.Save(_stream);
_package.Close();
if (Stream is MemoryStream)
{
var fi = new FileStream(File.FullName, FileMode.Create);
//EncryptPackage
if (Encryption.IsEncrypted)
{
#if !MONO
byte[] file = ((MemoryStream)Stream).ToArray();
EncryptedPackageHandler eph = new EncryptedPackageHandler();
var ms = eph.EncryptPackage(file, Encryption);
fi.Write(ms.GetBuffer(), 0, (int)ms.Length);
#endif
#if MONO
throw new NotSupportedException("Encryption is not supported under Mono.");
#endif
}
else
{
fi.Write(((MemoryStream)Stream).GetBuffer(), 0, (int)Stream.Length);
}
fi.Close();
}
else
{
System.IO.File.WriteAllBytes(File.FullName, GetAsByteArray(false));
}
}
}
catch (Exception ex)
{
if (File == null)
{
throw;
}
else
{
throw (new InvalidOperationException(string.Format("Error saving file {0}", File.FullName), ex));
}
}
}
So, was my excel file removed? And what is the reason epplus deletes excel files? (according to this sample code) These are some exception
System.InvalidOperationException: Error saving file E:\Test\Morning.xlsx --->
System.Xml.XmlException: There is an unclosed literal string. Line 1, position 8190.
at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
at System.Xml.XmlTextReaderImpl.ParseAttributeValueSlow(Int32 curPos, Char quoteChar, NodeData attr)
at System.Xml.XmlTextReaderImpl.ParseAttributes()
at System.Xml.XmlTextReaderImpl.ParseElement()
at System.Xml.XmlTextReaderImpl.ParseElementContent()
at OfficeOpenXml.ExcelWorksheet.LoadCells(XmlTextReader xr)
at OfficeOpenXml.ExcelWorksheet.CreateXml()
at OfficeOpenXml.ExcelWorksheet..ctor(XmlNamespaceManager ns,
ExcelPackage excelPackage, String relID, Uri uriWorksheet, String sheetName,
Int32 aheetID, Int32 positionID, eWorkSheetHidden hide)
at OfficeOpenXml.ExcelWorksheets..ctor(ExcelPackage pck,
XmlNamespaceManager nsm, XmlNode topNode)
at OfficeOpenXml.ExcelWorkbook.get_Worksheets()
at OfficeOpenXml.ExcelWorkbook.Save()
at OfficeOpenXml.ExcelPackage.Save()
--- End of inner exception stack trace ---
at OfficeOpenXml.ExcelPackage.Save()
at Monitoring.FMain.SaveEPPLUS()
...
System.ArgumentOutOfRangeException: Index was out of range.
Must be non-negative and less than the siza of the collection