我有一个用C#编写的WinForms应用程序,在将数据从SQL数据库导出到模板的工作表之前,使用以下代码打开Excel模板。
Microsoft.Office.Interop.Excel.Application oXL = new Microsoft.Office.Interop.Excel.Application();
oXL.Visible = true;
oXL.DisplayAlerts = false;
Microsoft.Office.Interop.Excel.Workbook mWorkBook = oXL.Workbooks.Open(path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
Excel.Worksheet mWorkSheet = mWorkBook.Worksheets["Invoice"];
但是,此代码实际上会打开模板本身,因此从SQL导出到工作簿的任何数据都会保存到模板中。我想要的是以编程方式打开模板的副本,就像在Windows资源管理器中直接双击模板并自动创建副本一样,而不会触及原始模板。
如何以编程方式执行此操作?
答案 0 :(得分:3)
然后将您要打开的文件复制到您选择的目的地并打开副本...
System.IO.File.Copy(sourceFile, destFile, true);
源文件是原始文件;
destFile是你的副本
并使用oXL.Workbooks.Opeen("path to destfile",....)
因此永远不会触及您的原始文件:)
答案 1 :(得分:3)
您实际上可以使用Excel Application对象的Workbooks.Add函数,并将模板路径作为参数传递。您以编程方式进行的任何未来更改都将在内存中进行尚未保存的副本。
我发现当您想要准备/预格式化新的Excel工作簿以供用户稍后进行交互时,这非常有用。
string templatePath = "c:\\temp\\template.xlsx";
Workbook wb = oXL.Workbooks.Add(templatePath);
//wb will be a memory copy of template.xlsx