我打算在我的 WPF 应用程序中使用 EPPlus(4.0.4 版本)库将我的实时数据导出到使用 C# .NET 的 Excel 工作表。然而,我的问题是针对 EPPLus 库的。
我已经浏览了 EPPlus 示例 (),您可以在其中使用 SetValue 将值写到工作表中。
问题是,由于我的应用程序需要在可能的几天内写入实时数据(!),我想确保我的数据每隔一段时间保存一次,以避免在应用程序/系统的情况下丢失数据碰撞。
通常,我希望有一个自动保存功能,其中可以保存当前状态,然后像往常一样继续添加新记录。
但是,EPPlus 似乎没有这个(?)......我将如何实现这一目标?
示例源代码:
using (ExcelPackage package = new ExcelPackage())
{
//Load the sheet with one string column, one date column and a few random numbers.
var ws = package.Workbook.Worksheets.Add("Performance Test");
//Format all cells
ExcelRange cols = ws.Cells["A:XFD"];
cols.Style.Fill.PatternType = ExcelFillStyle.Solid;
cols.Style.Fill.BackgroundColor.SetColor(Color.LightGray);
var rnd = new Random();
for (int row = 1; row <= Rows; row++)
{
ws.SetValue(row, 1, row);
ws.SetValue(row, 2, string.Format("Row {0}", row));
ws.SetValue(row, 3, DateTime.Today.AddDays(row));
ws.SetValue(row, 4, rnd.NextDouble() * 10000);
ws.SetValue(row, 5, rnd.NextDouble() * 100);
ws.SetValue(row, 6, rnd.NextDouble() * 10);
ws.SetValue(row, 7, rnd.NextDouble() * 78);
ws.SetValue(row, 8, rnd.NextDouble() * 5300);
ws.SetValue(row, 9, rnd.NextDouble() * 1250);
ws.SetValue(row, 10, rnd.NextDouble() * 670);
if (row % 10000 == 0)
{
Console.WriteLine("{0:HH.mm.ss}\tWriting row {1}...", DateTime.Now, row);
//I need a way to save the existing data say every 10K records or so.
}
}
ws.Select("C2");
Console.WriteLine("{0:HH.mm.ss}\tSaving...", DateTime.Now);
package.Compression = CompressionLevel.BestSpeed;
package.SaveAs(newFile); //this seems to be done only at the end of processing!
}