我开发了一个应用程序,它生成带有图表,数据等的丰富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 workbok开启正确的开发流程,并在每次启动后动态获取报告更新。我相信COM技术可以做到。
我需要将已打开的工作簿的所有内容替换为另一个(临时).xls文件。你能告诉我工作的例子吗?
答案 0 :(得分:0)
你的问题不够明确。我的理解是你想要从另一个文件中替换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();