【原創】.NET讀寫Excel工具Spire.Xls使用(2)Excel檔案的控制
前一篇文章:“.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檢視的話,是右邊的樣子,雖然顯示不一樣,但原理是一樣的:
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
加密後開啟檔案就是這個樣子了:
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的“保護工作表”介面類似,如下圖:
保護工作表的作用一般是防止誤操作或者對於有版權保護的,不能輕易更改的情況。大家看情況使用,我這裡很少用到,只是瞭解到了,順便說一下。
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讀寫Excel工具Spire.Xls使用(3)單元格控制
前一篇文章:“.NET讀寫Excel工具Spire.Xls使用(2)Excel檔案的控制”給大家介紹了C#使用Spire.XLS來控制Excel檔案的基本功能和相關實踐程式碼。這篇文章將重點介紹C#操作Excel檔案時,對Excel單元格的控制。 以前在使用NPOI的時候,其實印象最深的還是
【原創】.NET讀寫Excel工具Spire.Xls使用(1)入門介紹
在.NET平臺,操作Excel檔案是一個非常常用的需求,目前比較常規的方法有以下幾種: 1.Office Com元件的方式:這個方式非常累人,微軟的東西總是這麼的複雜,使用起來可能非常不便,需要安裝Excel,對於伺服器,有時候還需要為配置IIS許可權。折騰人,看到很多人在群裡面使用這個東西,出現各種抓
【原創】.NET讀寫Excel工具Spire.Xls使用(2)Excel檔案的控制
前一篇文章:“.NET操作Excel利器Spire.Xls使用(1)入門介紹 ”給大家介紹了Spire.XLS的基本功能和一些比較。這篇文章將重點介紹C#操作Excel檔案時,對Excel檔案本身的相關設定,全域性控制的內容。因為這也是C#讀寫Excel檔案時經常碰到的文章,也是我在使用過程中的一
【原創】.NET讀寫Excel工具Spire.Xls使用(4)對資料操作與控制
Spire.Office for .NET是E-iceblue開發的一種企業級.NET Office編輯的軟體集合,包括Spire.Doc,Spire XLS,Spire.PDF,Spire.BarCode等等。.NET平臺的開發人員可以使用Spire.Office for .NET輕鬆的操作含有
【原創】.NET讀寫Excel工具Spire.Xls使用(5)重量級的Excel圖表功能
前一篇文章:“.NET讀寫Excel工具Spire.Xls使用(4)對資料操作與控制”給大家介紹了Spire.XLS對資料的控制相關功能,這一篇給大家介紹Spire.XLS最大的亮點所在,C#控制Excel生成圖表。將介紹C#生成不同型別圖表的方法,並介紹Excel圖表的相關操作,如調整大小,儲存
【原創】自己動手寫一個服務網關
exception 負責 lis world 前置 create ble ddr load 引言 什麽是網關?為什麽需要使用網關? 如圖所示,在不使用網關的情況下,我們的服務是直接暴露給服務調用方。當調用方增多,勢必需要添加定制化訪問權限、校驗等邏輯。當添加API網關後,
【原創】自己手寫實現Boost序列化簡易版
設計思路 在與多個系統進行網路互動時,序列化是不可缺少的技術。編寫一個C++語言的序列化實現,是練習運用模板超程式設計的絕佳案例,理解C++模板是如何"面向編譯期程式設計"的(業內好像沒有這個說法)。序列化物件處理基礎資料型別和類型別,boost的序列化功能劃分得更細緻,基本支援了C++語言
【原創】整數讀入優化 C++
一、背景 這是某道題目的狀態: 我的程式碼: 大牛的程式碼: 我瞬間萌幣了! 我有這麼慢?Are you kidding me? 點進去一看: void Read(int & p)
【OpenCV3】視訊讀寫cv::VideoCapture和cv::VideoWriter
OpenCV3和OpenCV2類似,視訊的讀、寫操作,分別通過cv::VideoCapture和cv::VideoWriter兩個類來實現。 1、視訊的讀取操作cv::VideoCapture cv::VideoCapture既支援視訊檔案的讀取,也支
【Linux】磁碟讀寫 測試
一、如何檢視當前磁碟的IO使用情況 使用命令:iotop Total DISK READ: 3.89 K/s | Total DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO>
【OSS】Bucket讀寫許可權
使用者建立的Bucket總共有三種許可權: /*私有 * 只允許自己讀寫操作,其他使用者沒有許可權 */ CannedAccessControlList acl_private = CannedAccessControlList.Private; /*公共讀寫
【Qt】QSettings讀寫登錄檔、配置檔案【轉】
簡述 一般情況下,我們在開發軟體過程中,都會快取一些資訊到本地,可以使用輕量級資料庫sqlite,也可以操作登錄檔、讀寫配置檔案。 關於QSettings的使用前面已經介紹過了,比較詳細,見“更多參考”,下面介紹下QSettings常用功能-讀寫登錄檔、配置檔案。 簡述 優點 讀
【原創】.NET平臺機器學習元件-Infer.NET連載(一)介紹
關於本文件的說明 本文件基於Infer.NET 2.6對Infer.NET User Guide進行中文翻譯,但進行了若干簡化和提煉,按照原網站的思路進行,但不侷限與其順序。 歡迎傳播分享,必須保持原作者的資訊,但禁止將該文件直接用於商業盈利。 本人正在研究基於Infer.NET元件,並
【原創】.NET平臺機器學習元件-Infer.NET連載(二)貝葉斯分類器
關於本文件的說明 本文件基於Infer.NET 2.6對Infer.NET User Guide進行中文翻譯,但進行了若干簡化和提煉,按照原網站的思路進行,但不侷限與其順序。 歡迎傳播分享,必須保持原作者的資訊,但禁止將該文件直接用於商業盈利。 本人正在研究基於Infer.NET元件,並
【MFC】VC讀寫ini檔案
可以用於載入時,讀取上一次的紀錄。 一:寫ini配置檔案: //獲取exe路徑 CString strPath; GetModuleFileName(NULL,strPath.GetBufferSetLength(MAX_PATH+1),M
【轉】delphi讀寫txt檔案
1. memo控制元件讀取txt memo1.Lines.LoadFromFile('E:/*/*.txt'); 2. Procedure NewTxt(FileName:String); Var F : Textfile; Begin if fileExists(Fil
【原創】.NET中Trace類和Debug類的應用舉例
.NET中Trace類和Debug類的應用舉例 .NET中的Trace類和Debug類是System.Diagnostics名稱空間下的兩個用於除錯的類,在軟體開發中使用得當,可以幫助我們除錯開發程式,提高效率,很有用。其中,Debug類僅在除錯版本中有效,而Trace
【轉載】ReentrantReadWriteLock讀寫鎖的使用
Lock比傳統執行緒模型中的synchronized方式更加面向物件,與生活中的鎖類似,鎖本身也應該是一個物件。兩個執行緒執行的程式碼片段要實現同步互斥的效果,它們必須用同一個Lock物件。 讀寫鎖:分為讀鎖和寫鎖,多個讀鎖不互斥,讀鎖與寫鎖互斥,這是由jvm自己控制的
【原創】(四)Linux程序排程-組排程及頻寬控制
# 背景 - `Read the fucking source code!` --By 魯迅 - `A picture is worth a thousand words.` --By 高爾基 說明: 1. Kernel版本:4.14 2. ARM64處理器,Contex-A53,雙核 3. 使用工具:S
【原創】EXCEL公式經驗(7)---EXCLE一般都是返回單個值得,如何寫公式返回多個匹配值?
(1)一般excel都只能在一個單元格,且是輸入公式的這個單元格,返回一個值 (2)少數情況,可以在這個一單元格返回多個值 (3)現在考慮的是,輸入公式後,可以返回多個值 看起來公式還是遵循了(1)原則 INDEX($A:$A