程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c#創建、保存excel正常執行要點補疑(2)

c#創建、保存excel正常執行要點補疑(2)

編輯:關於C語言

代碼注釋部分只是簡單描述各語句的原由,個別的還是值得推敲的。

語句一 Workbook wBook = app.Workbooks.Add(true);Workbooks.Add的參數是個object類型,通常使用true或null,表明工作簿在默認文檔下創建,或者使用枚舉值 XlWBATemplate.xlWBATWorksheet,但如果傳入一個Excel完整文件名,卻相當於打開已有工作簿。

語句二 Worksheet wSheet = wBook.Worksheets[1] as Worksheet;wBook.Worksheets雖然反映的是工作表的集合,然而新創建的工作簿中只有一個工作表,且索引是1,如果換成0將無法找到指定的WorkSheet,如果是操作多個工作表的話,建議用new WorkSheetClass()實例化之後加入到wBook.Worksheets中去。如果是打開已存在的工作簿,這條語句也可能會報錯,最好是調用wBook.ActiveSheet來獲取或者再加些判斷。

語句三 wBook.Save();app.Save("C:\\abc.xls");這兩句代碼至關重要,而且必不可少,否則,保存時會彈出“是否保存sheet1.xls”的對話框。像示例中的保存,在Windows server 2003中,因為權限的原因,還可能會出現這樣的現象(其它操作系統的結果有待考證):生成的abc.xls除了本機上運行此代碼的用戶打開正常外,其他戶打開後的錯誤信息如下:

無法訪問文件。請嘗試下列方法之一:

確認所指定的文件夾已存在。

確認文件所在的文件夾不是只讀的。

確認給出的文件名不包含下列字符:<>?[]:Sheet1.xls或*。

確認文件/路徑名長度不超過218個字符。

因為此時創建的工作簿其實是在當前用戶的“我的文檔”目錄下自動生成了一個Sheet1.xls副本,而abc.xls是指向這個副本的快捷方式,所以導致其他用戶無權訪問。我采取的解決辦法是將這兩句替換為:

wSheet.SaveAs("C:\\abc.xls",Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);

wBook.Save();

這樣做,“我的文檔”下就不會再創建Sheet1.xls,而且打開可以發現,原來工作簿裡那個工作表名是sheet1.xls的也更改名字為abc.xls了。

語句四 app.Quit();

這個關閉一直有疑點,因為C#操作com非托管對象時,憑借Quit()還沒有釋放掉對象,excel進程不一定會終止,於是,有人使用KillProcess()來處理,我個人認為這不是一個好主意,可能會破壞其它正在執行的Excel進程。目前我使用app = null;權作安慰吧。不過有一點是一定要做到,就是在Quit()前不能再有任何更改,不然還是會彈出保存的對話框。所以退出前確保一定是執行過WorkBook或是Application的Save()方法的。

對於在c#中操作Excel應用的方面很多,可能還會有些疑問出現,知曉來龍去脈的朋友盡量補充以方便大家吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved