我有一个程序,用户选择一些数据然后程序打开并填充保存在程序目录中的模板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>
我理想的解决方案是只为用户提供一个新的,未保存的工作簿,只在他们的桌面上打开,然后他们可以根据需要保存它们/如果他们不想要的话根本不保存它。
我想我能做到这一点:
ExcelApp.Workbooks.Add
但如果模板尺寸合适,那将是非常耗费处理器的,我希望有更好的方法来实现这一目标。
谢谢!
答案 0 :(得分:4)
对于那些遇到同样问题的人,我想出了如何做我想做的事。
我的诀窍是将原始模板表字面上保存为Excel模板(.xlst
)。然后,我需要改变的是改变这行代码:
ExcelWorkbook = ExcelApp.Workbooks.Open(PathToTemplateSheet)
要:
ExcelWorkbook = ExcelApp.Workbooks.Add(PathToTemplateSheet)
这样做是基于模板创建一个新工作簿,因此可以根据需要多次创建,并且永远不会导致特定用户打开实际的原始模板文件。
希望这也有助于其他人!!