打开模板文件的多个副本(.Net,Excel.Interop)

时间:2014-02-04 18:56:38

标签: c# vb.net excel templates interop

我有一个程序,用户选择一些数据然后程序打开并填充保存在程序目录中的模板Excel工具簿,供用户使用,然后可以进一步修改,写入数据库等。

代码看起来像这样:

Dim ExcelApp As New Microsoft.Office.Interop.Excel.Application
Dim ExcelWorkbook As Microsoft.Office.Interop.Excel.Workbook = Nothing
...
ExcelWorkbook = ExcelApp.Workbooks.Open(PathToTemplateSheet)
...
ExcelWorkbook.SaveAs(Filename:=TempFileNameToSave)

通过将工作簿保存到临时位置,我确保用户不会覆盖模板,但这仍然会给我带来问题,因为没有2个用户可以在此工作簿上工作同一时间,因为工作簿TempFileNameToSave已经由其他用户打开。

我的问题是,能够打开模板表的多个副本的最佳方法是什么,而不会为用户造成任何问题/在他们需要的情况下覆盖旧的? / p>

我理想的解决方案是只为用户提供一个新的,未保存的工作簿,只在他们的桌面上打开,然后他们可以根据需要保存它们/如果他们不想要的话根本不保存它。

我想我能做到这一点:

  1. 创建新的空白工作簿:ExcelApp.Workbooks.Add
  2. 按上述方式打开模板
  3. 将所有工作表从一个工作表复制到另一个工作表
  4. 关闭模板
  5. 但如果模板尺寸合适,那将是非常耗费处理器的,我希望有更好的方法来实现这一目标。

    谢谢!

1 个答案:

答案 0 :(得分:4)

对于那些遇到同样问题的人,我想出了如何做我想做的事。

我的诀窍是将原始模板表字面上保存为Excel模板(.xlst)。然后,我需要改变的是改变这行代码:

ExcelWorkbook = ExcelApp.Workbooks.Open(PathToTemplateSheet)

要:

ExcelWorkbook = ExcelApp.Workbooks.Add(PathToTemplateSheet)

这样做是基于模板创建一个新工作簿,因此可以根据需要多次创建,并且永远不会导致特定用户打开实际的原始模板文件。

希望这也有助于其他人!!