c#通过COM与Excel一起工作:如何用另一个工作簿替换整个工作簿
本文关键字:工作簿 另一个 何用 替换 COM 通过 Excel 工作 一起 | 更新日期: 2023-09-27 18:18:00
我开发了一个应用程序,它生成了包含图表、数据等的丰富的Excel文件(报告)。我的程序现在只是将生成的结果保存在一个文件中并启动它:
byte[] reportBytes = getReport(...);
string reportFilename = "report.xls";
Excel.Application oXL;
Excel.Workbook oWB;
try
{
oXL = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
oWB = oXL.Workbooks[name];
oWB.Close(false);
}
catch (Exception ex)
{
//
}
File.WriteAllBytes(reportFilename, reportBytes);
Process.Start(reportFilename);
在这个代码打开Excel工作簿是关闭和重新打开(导致眨眼),每次当我启动我的应用程序。我想有Excel工作簿打开应有的开发过程,并在每次启动后动态获得报告更新。我相信COM技术可以做到。
我需要从另一个(临时).xls文件中替换打开的工作簿的所有内容。你能给我举个例子吗?
你的问题不够清楚。我理解的是你想要替换excel文件的内容。为什么不简单地复制粘贴文件呢?如果以前的文件是必要的,那么在用新文件覆盖之前,只需将其复制到备份文件夹中。
如果我说的适用,那么请评论我的答案。我将进一步调查这个问题。请把问题解释清楚。
关于闪烁问题,为什么不试试这个呢:
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
app.Workbooks.Open(@"<FilePath>");
但是这会启动Excel,你必须手动关闭它。
为避免在打开和关闭excel文件时闪烁,请使用oledb写入excel。下面是一个示例代码:
string filePath = @"<FilePath>";
string connectionString = @"Provider = Microsoft.ACE.OLEDB.12.0, Data Source={0}";
OleDbConnection conn = new OleDbConnection();
OleDbCommand cmd = new OleDbCommand();
conn.ConnectionString = string.Format(connectionString, filePath);
conn.Open();
cmd.CommandText = "Insert into [Sheet1$] (a1,a2) values('5','e')";
cmd.ExecuteNonQuery();
conn.Close();