使用C#在Excel文件中记录数据
本文关键字:记录 数据 文件 Excel 使用 | 更新日期: 2023-09-27 18:25:57
我需要在Excel文件中记录来自多个接口的数据范围。
因此,我可以打开excel表格,并将数据保存在excel表格的不同工作表中,这些工作表来自多个接口,不同接口的迭代周期为40ms至100ms。
我尝试过使用EPPlus库并能够推送数据,但这就像我只是整理数据,然后将其推送到Excel工作表中。我找不到任何方法可以在多个工作表中同时写入数据。
我试图在InterOp中使用一种方法,但我不确定这个工作文件中的快速数据是否来自多个接口,是否需要填写在一个或多个工作表中。
有人可以建议最好的方法吗?
您实际上在这里描述了两种功能——日志记录和报告。
Excel文件决不是实时数据存储。它适用于报告,但不适用于日志记录。
我建议在其他地方积累数据,例如在关系数据库中或仅在csv文件中,这取决于您的可靠性和可扩展性需求,并在关闭的时间段聚合excel文件,例如:一天、每小时、每分钟。
如果你绝对需要在运行时将许多项目添加到不同的excel表中,你可以使用Microsoft OleDb驱动程序:
const string connectionString =
@"Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 XML;Data Source=C:'source'MyExcel.xlsx;";
using (var conn = new OleDbConnection(connectionString))
{
conn.Open();
foreach (var sheet in new[] { "sheet1", "sheet2", "sheet3" })
{
using (var cmd = new OleDbCommand())
{
cmd.Connection = conn;
try
{
cmd.CommandText = "CREATE TABLE [" + sheet + "] (id INT, datecol DATE );";
cmd.ExecuteNonQuery();
}
catch (Exception) // TODO: find better way to determine existing sheet
{
Console.WriteLine("Can't create {0}", sheet);
}
}
for (var i = 0; i < 1000; i++)
{
using (var cmd = new OleDbCommand())
{
cmd.Connection = conn;
var datecol = DateTime.Now;
var id = i;
cmd.CommandText = "INSERT INTO [" + sheet + "](id, datecol) VALUES(@id,@datecol);";
cmd.Parameters.Add("@id", OleDbType.Integer).Value = id;
cmd.Parameters.Add("@datecol", OleDbType.Date).Value = datecol;
cmd.ExecuteNonQuery();
}
}
}
conn.Close();
}