2013-12-23 76 views
1

我有一個用C#編寫的WinForms應用程序,它使用以下代碼打開Excel模板,然後將數據從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資源管理器中直接雙擊模板並自動創建副本,而不觸摸原始模板時,以與此相同的方式以編程方式打開模板副本。

如何以編程方式執行此操作?

回答

4

然後複製要打開到您選擇的目的地,然後打開副本的文件...

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

的的資源文件是原始文件; 的destFile是你的副本 並打開與oXL.Workbooks.Opeen("path to destfile",....)

的destfile所以你的原始文件從未接觸過:)

3

實際上,你可以用你的Excel應用程序對象的Workbooks.Add功能,並通過在模板路徑作爲參數。以編程方式進行的任何未來更改都將在內存中完成,以保存尚未保存的副本。

我發現當你想準備/預先格式化一個新的excel工作簿供用戶稍後與之交互時,這很有用。

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