基于模板的Excel打开副本

我有一个用C#编写的WinForms应用程序,它使用以下代码打开Excel模板,然后将数据从SQL数据库导出到模板的工作表中。

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资源pipe理器中双击模板并自动创build副本,而不触摸原始模板时。

我怎样才能做到这一点编程?

然后复制你想打开的文件到你select的目的地并打开复制…

 System.IO.File.Copy(sourceFile, destFile, true); 

源文件是原始文件; destFile是你的副本,你用oXL.Workbooks.Opeen("path to destfile",....)打开destfile。

所以你的原始文件永远不会被感动:)

您实际上可以使用Excel应用程序对象的Workbooks.Addfunction,并将模板path作为参数传入。 以编程方式进行的任何未来更改都将作为内存中尚未保存的副本完成。

我发现,当你想为用户准备/预先格式化一个新的Excel工作簿时,这是非常有用的。

 string templatePath = "c:\\temp\\template.xlsx"; Workbook wb = oXL.Workbooks.Add(templatePath); //wb will be a memory copy of template.xlsx