天天看點

【原創】.NET讀寫Excel工具Spire.Xls使用(2)Excel檔案的控制

【原創】.NET讀寫Excel工具Spire.Xls使用(2)Excel檔案的控制

前一篇文給大家介紹了Spire.XLS的基本功能和一些比較。這篇文章将重點介紹C#操作Excel檔案時,對Excel檔案本身的相關設定,全局控制的内容。因為這也是C#讀寫Excel檔案時經常碰到的文章,也是我在使用過程中的一個學習步驟。本文将首先介紹Spire.XLS建立和加載文檔的基礎知識,以及檔案儲存,多個Excel檔案合并的操作方法,其中我們還可以對生成的Excel檔案做更多詳細的設定,如,對Excel檔案屬性進行設定等等,其次很多項目中,不僅要生成Excel檔案,還需要列印并擷取一些分頁資訊;最後介紹一下使用C#設定加密保護Excel檔案的方法。

                本部落格所有文章分類的總目錄:http://www.cnblogs.com/asxinyu/p/4288836.html

.NET讀寫Excel工具Spire.Xls使用文章目錄:http://www.cnblogs.com/asxinyu/p/4374032.html

  前一篇文章:“.NET操作Excel利器Spire.Xls使用(1)入門介紹 ”給大家介紹了Spire.XLS的基本功能和一些比較。這篇文章将重點介紹C#操作Excel檔案時,對Excel檔案本身的相關設定,全局控制的内容。因為這也是C#讀寫Excel檔案時經常碰到的文章,也是我在使用過程中的一個學習步驟。本文将首先介紹Spire.XLS建立和加載文檔的基礎知識,以及檔案儲存,多個Excel檔案合并的操作方法,其中我們還可以對生成的Excel檔案做更多詳細的設定,如,對Excel檔案屬性進行設定等等,其次很多項目中,不僅要生成Excel檔案,還需要列印并擷取一些分頁資訊;最後介紹一下使用C#設定加密保護Excel檔案的方法。

1.Excel文檔的建立、加載與儲存

  我們的上一篇文章的初步介紹中,有一個Hello Excel的例子,其實就已經包括了Excel檔案建立和儲存的方法,非常簡單。這一節将着重對每個細節進行更詳細點的研究。

1.1 儲存Excel檔案

  Excle檔案的儲存都是使用Workbook的SaveToFile方法,有以下幾個版本,可以根據自己的需要,根據檔案名,Excel檔案版本,以及檔案格式來儲存,方法原型如下,比較簡單不再示範,在後續的文章中會在代碼中用到。

1 //根據檔案名,檔案版本,檔案格式資訊來儲存檔案
2 public void SaveToFile(string fileName);
3 public void SaveToFile(string fileName, ExcelVersion version);
4 public void SaveToFile(string fileName, FileFormat fileFormat);
5 public void SaveToFile(string fileName, string separator);      

 1.2 從不同途徑加載Excel

  使用C#操作Excel檔案,不一定都是生成Excel檔案報表之類的,有時候也需要加載已經存在的資料(XML,Excle等)來進行修改,然後儲存到對應的Excel檔案中去。加載到Excel的方法是Workbook對象的LoadFromFile、LoadFromStream、LoadFromXml等方法,方法原型有以下幾個:

1 //從檔案加載,根據檔案名,保護模式和Excel版本
 2 public void LoadFromFile(string fileName);
 3 public void LoadFromFile(string fileName, bool preserveMode);
 4 public void LoadFromFile(string fileName, ExcelVersion version);
 5 public void LoadFromFile(string fileName, string separator);
 6 public void LoadFromFile(string fileName, string separator, int row, int column);
 7 public void LoadFromFile(string fileName, string separator, int row, int column, ExcelVersion version);
 8 //從資料流中加載
 9 public void LoadFromStream(Stream stream);
10 public void LoadFromStream(Stream stream, bool loadStyles);
11 public void LoadFromStream(Stream stream, ExcelVersion version);
12 //從XML檔案加載
13 public void LoadFromXml(Stream stream);
14 public void LoadFromXml(string fileName);
15 //從模版檔案加載
16 public void LoadTemplateFromFile(string fileName);
17 public void LoadTemplateFromFile(string fileName, bool loadStyles);      

2.C#設定Excel檔案屬性

  檔案屬性這個雖然一般人很少用到,但還是介紹一下,畢竟如果檔案分發出去的話,将相關屬性資訊添加完整,還是很有必要的。Excel檔案屬性可以點選檔案右鍵-屬性看到界面,如下圖我使用WPS檢視的Excel檔案屬性,使用Office Excel檢視的話,是右邊的樣子,雖然顯示不一樣,但原理是一樣的:

【原創】.NET讀寫Excel工具Spire.Xls使用(2)Excel檔案的控制
【原創】.NET讀寫Excel工具Spire.Xls使用(2)Excel檔案的控制

      1.WPS顯示的Excel屬性                                             2.Office Excle顯示的檔案屬性

  設定Excel檔案屬性的方法在Workbook對象的DocumentProperties屬性中,這個屬性是一個XlsBuiltInDocumentProperties類型,在Spire.Xls.Core.Spreadsheet.Collections命名空間,通過VS的對象浏覽器也可以發現其實作的一些原理,可以擴充到其他的元件使用中。看看一個簡單的例子: 

1 #region 2.Excel檔案屬性例子
 2 static void ExcelTest2()
 3 {            
 4     Workbook workbook = new Workbook();
 5 
 6     //修改文檔屬性資訊,這樣在釋出的時候,可以通過文檔顯示公司以及檔案人的資訊
 7     workbook.DocumentProperties.Author = "張三";            //作者
 8     workbook.DocumentProperties.Subject = "測試檔案屬性";   //主題
 9     workbook.DocumentProperties.Title = "測試Excel檔案";    //标題
10     workbook.DocumentProperties.Company = "XX有限公司";     //機關
11     workbook.DocumentProperties.Comments = "保留檔案評論";  //評論
12     workbook.DocumentProperties.Keywords = "測試 Excel ";   //關鍵詞
13     workbook.DocumentProperties.CreatedTime = DateTime.Now; //建立時間
14     //TODO:還有其他屬性,可以參考XlsBuiltInDocumentProperties的相關屬性          
15 
16     //将Excel檔案儲存到指定檔案,還可以指定Excel版本
17     workbook.SaveToFile("Sample.xls", ExcelVersion.Version2007);
18 }
19 #endregion      

  注意,由于我沒有安裝Office 2007及以上版本,用WPS顯示的時候,有點問題,要用WPS轉換為2003版本後才能看出來,這可能是WPS的原因,調試生成的檔案發現,這些屬性值都是存在的。是以我也沒去折騰,安裝個Office 真的很麻煩。 

3.C#加密和保護Excel檔案

  相信很多人都用過Office的加密以及保護功能,對于Excel來說,加密和保護的範圍更加廣泛了:不僅可以加密檔案,還可以保護指定的Sheet,指定的單元格等等。其實開源的NPOI元件也可以這樣做,以前沒用過但了解過,用NPOI的朋友可以看看這個:http://tonyqus.sinaapp.com/archives/196,既然要用Spire.XLS,那就看看如何做。

3.1 加密Excel檔案

  Excel檔案級的加密其實很簡單,就是Workbook對象的Protect方法,傳遞加密密碼即可;如果想要取消密碼,則使用workbook.UnProtect(),注意取消加密是不需要密碼的,Excel軟體操作也是的,是以程式操作也不需要。

1 #region 3.加密Excel檔案例子
2 static void ExcelTest3()
3 {
4     Workbook workbook = new Workbook();
5     workbook.Protect("pwd111");//設定保護加密的 密碼 :pwd111
6     //将Excel檔案儲存
7     workbook.SaveToFile("Sample.xls", ExcelVersion.Version2007);
8 }
9 #endregion      

加密後打開檔案就是這個樣子了:

【原創】.NET讀寫Excel工具Spire.Xls使用(2)Excel檔案的控制

3.2 保護Sheet與單元格

   Sheet的保護更加靈活一點,使用的是Worksheet對象的Protect方法,傳遞的參數是 保護的密碼,以及可選的保護類型(更加豐富的保護類型),看看下面的例子:

1 Workbook workbook = new Workbook();
2 
3 Worksheet sheet = workbook.Worksheets[0];
4 
5 //保護sheet
6 sheet.Protect("test", SheetProtectionType.All);
7 
8 //将Excel檔案儲存
9 workbook.SaveToFile("Sample.xlsx", ExcelVersion.Version2010);      

實作的效果應該和WPS的“保護工作表”界面類似,如下圖:

【原創】.NET讀寫Excel工具Spire.Xls使用(2)Excel檔案的控制

保護工作表的作用一般是防止誤操作或者對于有版權保護的,不能輕易更改的情況。大家看情況使用,我這裡很少用到,隻是了解到了,順便說一下。

1 static void ExcelTest4()
 2 {
 3     Workbook workbook = new Workbook();
 4     workbook.CreateEmptySheets(1);
 5     Worksheet sheet = workbook.Worksheets[0];
 6 
 7     sheet.Range["A1"].Text = "鎖定";
 8     sheet.Range["B1"].Text = "未鎖定";
 9 
10     sheet.Range["A1"].Style.Locked = true;
11     sheet.Range["B1"].Style.Locked = false;
12 
13     //一定要對工作表進行保護,才能生效
14     sheet.Protect("test", SheetProtectionType.All);
15 
16     workbook.SaveToFile(@"Sample_Lock.xlsx", ExcelVersion.Version2010);
17 }      

  今天就到此為止把,雖然都很簡單,但了解一下,對以後熟練開發還是有好處的。例子非常簡單,代碼都在上面,到本系列完成後,再打包一份代碼。

.NET資料挖掘與機器學習,作者部落格:

http://www.cnblogs.com/asxinyu

E-mail:[email protected]