C#元件系列——又一款Excel處理神器Spire.XLS,你值得擁有(二)
前言:上篇 C#元件系列——又一款Excel處理神器Spire.XLS,你值得擁有 介紹了下元件的兩個功能,說不上特色,但確實能解決我們專案中的一些實際問題,這兩天繼續研究了下這個元件,覺得有些功能用起來還是挺方便的,這篇繼續來看看Spire.XLS的一些其他功能,說不定有你需要的呢~~
一、基礎入門
1、新建Workbook
Spire.XLS提供了多種方式建立Workbook物件
1.1、新建空的Workbook
//新建Workbook Workbook workbook = new Workbook(); //得到第一個Sheet頁 Worksheet sheet = workbook.Worksheets[0]; //給A2這個單元格設定值 sheet.Range["A2"].Text = "你好,Jim" ; //儲存到物理路徑 var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"; workbook.SaveToFile(strFullName);
就這麼簡單生成一個Excel檔案
1.2、根據物理路徑生成Workbook
//新建Workbook Workbook workbook = new Workbook(); //將當前路徑下的檔案內容讀取到workbook物件裡面workbook.LoadFromFile(@"D:\Data\Upload\Export20160926114559.xlsx"); //得到第一個Sheet頁 Worksheet sheet = workbook.Worksheets[0]; //給A2這個單元格設定值 sheet.Range["C5"].Text = "你好,Jim" ; //儲存到物理路徑 var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"; workbook.SaveToFile(strFullName,ExcelVersion.Version2010);
1.3、根據檔案流生成Workbook
上篇我們演示過多次,對於Web裡面的檔案上傳,多用此方法。
//得到當前請求的檔案 var oFile = Request.Files["txt_file"]; //根據當前的檔案流生成Workbook物件 Workbook book = new Workbook(); book.LoadFromStream(oFile.InputStream);
1.4、根據Excel模板生成Workbook
這種用法適用於專案需要使用Excel模板的時候,比如我們專案需要匯出的每一個Excel都適用如下模板:
那麼,我們每次生成Excel的時候可以根據該模板去建立Workbook
//新建Workbook Workbook workbook = new Workbook(); //根據模板生成Workbook workbook.LoadTemplateFromFile(@"D:\Data\Upload\Template.xlsx");
這樣得到的Excel檔案將會自動套用該模板樣式。
2、讀寫Workbook
2.1、根據單元格的名稱框來讀寫Excel
關於Workbook的讀寫,上文已經提供了一種方式,形如:
sheet.Range["C5"].Text = "你好,Jim" ;
這樣就能給C5單元格賦值,如果是取值,可以直接使用同樣的方式。當然,除了Text字串的內容,元件還提供了NumberValue、DateTimeValue、BooleanValue等屬性,用於讀寫數字、時間、bool型別的值。
當然,Range除了支援基礎的單元格名稱框來讀寫值之外,它還提供了給某一個區域的文字框賦值的功能。比如
sheet.Range["C5:E6"].Value = "你好,Jim" ;
這一句表示給C5-E6這一區域的文字框統一賦值。得到結果如下:
如果需要操作當前區域的所有單元格,可以這樣:
var columes = sheet.Range["C5:E6"].Columns ; foreach (var column in columes) { }
2.2、根據單元格的行列索引來讀寫Excel
除了上面的方式,元件還支援通過行列的索引去給單元格取賦值。
sheet.Range[1, 1].Text = "部門名稱";
以上一句表示給第一個行第一列單元格賦值。
3、儲存Workbook
關於Excel的儲存,元件同樣提供了多種方式。
3.1、直接儲存的方式:SaveToFile()
var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"; workbook.SaveToFile(strFullName);
值得一提的是,SaveToFile還支援儲存不同版本的Excel,來看這個過載
public void SaveToFile(string fileName, ExcelVersion version);
ExcelVersion是一個列舉型別,定義了各種不同版本的Excel:
public enum ExcelVersion { // 摘要: // Represents excel version 2007 xlsb Xlsb2007 = 0, // // 摘要: // Represents excel version 2010 xlsb Xlsb2010 = 1, // // 摘要: // OpenOffice Spreadsheet documents ODS = 2, // // 摘要: // Represents excel version 97-2003. Version97to2003 = 3, // // 摘要: // Represents excel version 2007 Version2007 = 4, Version2010 = 5, // // 摘要: // Represents excel version 2013. Version2013 = 6, }
3.2、儲存並且轉換檔案
上篇介紹Excel轉PDF的時候,我們知道元件提供了SaveToPdf()方法直接將Excel儲存成為pdf檔案,用法如下:
//儲存到物理路徑 var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf"; workbook.SaveToPdf(strFullName)
除了儲存成為pdf之外,還支援轉換成其他格式:
儲存為image
var strFullName = @"D:\Data\Upload\" + "Export" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".png"; var image = workbook.SaveAsImage(0, 100, 190); image.Save(strFullName);
SaveAsImage()第一個引數表示需要生成圖片的Sheet頁的索引;第二、三個引數表示生成圖片的X和Y的值。
儲存為xml
workbook.SaveAsXml(strFullName);
儲存到檔案流
using (var stream = new FileStream(strFullName, FileMode.Create)) { workbook.SaveToStream(stream); }
二、樣式
1、文字樣式
設定單元格字型樣式
sheet.Range["C5:E6"].Value = "aaabbbccc"; sheet.Range["C5:E6"].Style.Font.Color = Color.FromArgb(255, 125, 125);//文字顏色 sheet.Range["C5:E6"].Style.Font.IsBold = true;//字型是否加粗 sheet.Range["C5:E6"].Style.Font.IsItalic = true;//是否斜體 sheet.Range["C5:E6"].Style.Font.Underline = FontUnderlineType.Single;//下劃線 sheet.Range["C5:E6"].Style.Font.IsSuperscript = true;//是否呈現為下標 sheet.Range["C5:E6"].Style.Font.FontName = "華文彩雲";//字型名稱 sheet.Range["C5:E6"].Style.Font.Size = 30;//字型大小
得到結果
2、單元格樣式
關於單元格樣式設定
sheet.Range["C5:E6"].Style.HorizontalAlignment = HorizontalAlignType.Center;//水平對齊 sheet.Range["C5:E6"].Style.VerticalAlignment = VerticalAlignType.Center;//垂直對齊 sheet.Range["C5:E6"].ColumnWidth = 100;//單元格的寬度 sheet.Range["C5:E6"].RowHeight = 30;//行高 sheet.Range["C5:E6"].Style.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;//邊框 sheet.Range["C5:E6"].Style.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin; sheet.Range["C5:E6"].Style.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin; sheet.Range["C5:E6"].Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;
3、表格樣式
下面來一個奇偶行的樣式:
public static void sheetStyle(Workbook book, Worksheet sheet) { CellStyle oddStyle = book.Styles.Add("oddStyle"); oddStyle.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin; oddStyle.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin; oddStyle.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin; oddStyle.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin; oddStyle.KnownColor = ExcelColors.LightGreen1; CellStyle evenStyle = book.Styles.Add("evenStyle"); evenStyle.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin; evenStyle.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin; evenStyle.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin; evenStyle.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin; evenStyle.KnownColor = ExcelColors.LightTurquoise; foreach (CellRange range in sheet.AllocatedRange.Rows) { if (range.Row % 2 == 0) range.CellStyleName = evenStyle.Name; else range.CellStyleName = oddStyle.Name; } //Sets header style CellStyle styleHeader = sheet.Rows[0].Style; styleHeader.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin; styleHeader.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Thin; styleHeader.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin; styleHeader.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin; styleHeader.VerticalAlignment = VerticalAlignType.Center; styleHeader.KnownColor = ExcelColors.Green; styleHeader.Font.KnownColor = ExcelColors.White; styleHeader.Font.IsBold = true; sheet.Columns[sheet.AllocatedRange.LastColumn - 1].Style.NumberFormat = "\"$\"#,##0"; sheet.Columns[sheet.AllocatedRange.LastColumn - 2].Style.NumberFormat = "\"$\"#,##0"; sheet.AllocatedRange.AutoFitColumns(); sheet.AllocatedRange.AutoFitRows(); sheet.Rows[0].RowHeight = 20; }SheetStyle()
效果如下:
4、富文字編輯框
除了上面的一些簡單樣式外,元件還提供了富文字的編輯方式
ExcelFont fontBold = book.CreateFont(); fontBold.IsBold = true; ExcelFont fontUnderline = book.CreateFont(); fontUnderline.Underline = FontUnderlineType.Single; ExcelFont fontColor = book.CreateFont(); fontColor.KnownColor = ExcelColors.Green; RichText richText = sheet.Range["A1"].RichText; richText.Text = "Bold and underlined and colored text"; richText.SetFont(0, 3, fontBold); richText.SetFont(9, 18, fontUnderline); richText.SetFont(24, 30, fontColor);
效果
當然,這個功能可能在一些特定的場合才會用上。
三、凍結行列
元件提供了非常方便凍結行列的功能。
1、凍結行
sheet.FreezePanes(2, 1);
得到結果
2、凍結列
sheet.FreezePanes(1, 2);
得到結果
程式碼釋疑:這裡的兩個引數怎麼理解,第一個引數rowIndex,第二個引數columnIndex。為什麼sheet.FreezePanes(2, 1)能凍結首行?這裡博主的理解是這裡的引數設定的是開始滑動的行和列。也就是說FreezePanes(2,1)表示從第二行、第一列開始可以滑動,而FreezePanes(1,2)表示從第一行、第二列開始可以滑動。這樣是不是會好理解一點。
四、合併單元格
關於單元格的合併,元件使用也還算方便。
var mergecolumn = sheet.Merge(sheet.Range[1, 2], sheet.Range[1, 3]); mergecolumn.VerticalAlignment = VerticalAlignType.Center; mergecolumn.HorizontalAlignment = HorizontalAlignType.Center; mergecolumn.Text = "第一個合併的單元格" ;
得到結果
五、選項過濾功能
元件提供了方便的元件過濾功能
sheet.AutoFilters.Range = sheet.Range["A1:C1"];
以上表示對A1到C1這個區域的所有文字框進行過濾。效果如下:
六、下拉框
在Excel裡面,經常需要用到的一個功能就是在編輯單元格的時候使用下拉框,這樣方便了一些特定項的編輯。同樣,元件也為我們提供了這個功能
//下拉框 CellRange range = sheet.Range["A2:A6"]; //給E1到E10所有的單元格新增下拉選項,資料來源是A2到A6的值 sheet.Range["E1:E10"].DataValidation.DataRange = range;
效果如下:
七、顯示、隱藏行列
對於行列隱藏也算是一個常用功能,方法如下
//顯示、隱藏行列 sheet.HideColumn(10); sheet.HideRow(8); //sheet.ShowColumn(10); //sheet.ShowRow(7);
效果
八、搜尋結果高亮
foreach (CellRange range in sheet.FindAllString("行政部", true, true)) { range.Style.Color = Color.LawnGreen; }
效果如下
九、總結
至此,元件的一些基礎功能介紹完畢。當然,這並不是全部,只是博主選的一些覺得或許有用的功能,更多功能可以參考官網文件。
當然,如果本文能夠幫到你,還是希望園友們幫忙推薦,博主下次繼續努力!
歡迎各位轉載,但是未經作者本人同意,轉載文章之後必須在文章頁面明顯位置給出作者和原文連線,否則保留追究法律責任的權利
相關推薦
C#元件系列——又一款Excel處理神器Spire.XLS,你值得擁有(二)
前言:上篇 C#元件系列——又一款Excel處理神器Spire.XLS,你值得擁有 介紹了下元件的兩個功能,說不上特色,但確實能解決我們專案中的一些實際問題,這兩天繼續研究了下這個元件,覺得有些功能用起來還是挺方便的,這篇繼續來看看Spire.XLS的一些其他功能,說不定有你需要的呢~~ 一、基礎入門
C#元件系列——又一款Excel處理神器Spire.XLS,你值得擁有
前言:最近專案裡面有一些對Excel操作的需求,博主想都沒想,NPOI唄,簡單、開源、免費,大家都喜歡!確實,對於一些簡單的Excel匯入、匯出、合併單元格等,它都沒啥太大的問題,但是這次的需求有兩點是NPOI搞不定的: 匯入Excel後,需要切割Excel的Sheet頁,然後每個Sheet頁單獨生成一
C#元件系列——又一款日誌元件:Elmah的學習和分享
前言:好久沒動筆了,都有點生疏,12月都要接近尾聲,可是這月連一篇的產出都沒有,不能壞了“規矩”,今天還是來寫一篇。最近個把月確實很忙,不過每天早上還是會抽空來園子裡逛逛。一如既往,園子裡每年這個時候都有大把的年終總結、回憶過去展望未來之類的文章。博主是沒時間寫總結了,要學的東西太多。關於Vue的系列一定要抽
JS元件系列——又一款MVVM元件:Vue(一:30分鐘搞定前端增刪改查)
正文 前言:關於Vue框架,好幾個月之前就聽說過,瞭解一項新技術之後,總是處於觀望狀態,一直在猶豫要不要系統學習下。正好最近有點空,就去官網瞭解了下,看上去還不錯的一個元件,就抽空研究了下。最近園子裡vue也確實挺火,各種入門博文眼花繚亂,博主也不敢說寫
JS元件系列——又一款MVVM元件:Vue(二:構建自己的Vue元件)
前言:轉眼距離上篇 JS元件系列——又一款MVVM元件:Vue(一:30分鐘搞定前端增刪改查) 已有好幾個月了,今天打算將它撿起來,發現好久不用,Vue相關技術點都生疏不少。經過這幾個月的時間,Vue的發展也是異常迅猛,不過這好像和博主都沒什麼太大的關係,博主還是老老實實研究自己的技術吧。技術之路還很長,且行
又一款開源圖示庫 CSS.GG,值得一用
![](https://imgkr.cn-bj.ufileos.com/f819ad89-839d-409d-9a18-3ccd463814e8.png) 嗨,我是 `Martin`,也叫老王,今天推薦一款好用的開源圖示庫。 我們平常找圖示往往會去 [`iconfont`](https://www.ico
又一年沒有中國隊的世界杯,你還會熬夜打call嗎?網友的回答亮了
俄羅斯 .... 評論 一個 fff CA 圖片 通過 mage 作為足球界的第一盛宴,2018年俄羅斯世界杯將於明天點燃戰火,持續整整一個月。Giiso小智就想問,真球迷、假球迷、或是偽球迷,你們準備好要陷入這四年一度的狂歡了嗎? 根據公開的信息,目前可以通過央視、優酷
關於開發一款課程實驗軟體的專案需求分析與建議(NABCD)
N(Need 需求): 目前有些大學生在做課堂實驗時因為沒有完全理解老師的意思,對實驗具體的步驟不清楚,導致真正做實驗時無從下手,無法完成實驗要求,無法達到真正的效果;或者學校無法提供足夠的實驗資源讓學生充分完成實驗,學生無法有足夠的時間去完成整個實驗。 A(Approach 做法):
manacher算法處理最長的回文子串(二)
pub 中心 回文子串 max 最大 += public img cto 在上篇《manacher算法處理最長的回文子串(一)》解釋了manacher算法的原理,接著給該算法,該程序在leetcode的最長回文子串中通過。首先manacher算法維護3個變量。一
它是網際網路防毒軟體中的一股清流,功能強大,你值得擁有!
身處網際網路的時代,網路防毒是不可避免的! 今天給大家推薦一款簡單好用的防毒軟體,火絨安全,體積小不佔記憶體,功能實用沒有任何廣告彈窗,極小的佔用執行空間,可以說是國內防毒軟體中的清流。 火絨的介面非常簡潔,目前主要包含"病毒查殺"、"防護中心"、"家長控制"、"擴充
Jmeter之處理session、cookie以及如何做關聯(二)Jmeter如何提取響應頭部的JSESSIONID
就是利用Jmeter做介面測試的時候,如何提取頭部的JSESSIONID然後傳遞到下一個請求,繼續完成當前使用者的請求。其實,關於這個問題有三種種解決方法:3)如果響應頭裡面有這個JSESSIONID,我們可以通過新增cookie來解決這個問題,今天這篇部落格,我們重點講解第
男人襪,透氣清爽,又耐穿,你值得擁有…
小時候,幸福是件簡單的事情;長大後,簡單是件幸福的事情。 我們崇尚簡單的生活,所以男人襪就出現了..... 男人襪,透氣清爽,又耐穿!!! 男人襪推出商務男襪「定期送到家」服務,您可以像訂雜誌一樣定期收到男人襪寄送的襪子,
學不可以已--我一年Java之路的回顧,反思以及展望(下)
說到上個暑假,還有不得不提的事就是沉迷於CSDN的論壇中。早在暑假回家之前,除了那些學習計劃,我還有一個目標就是一定要在CSDN的Java板塊變成一個紅星,因為那個時候我覺得紅星就是技術水平高的代名詞(一般初學者才有這個想法^_^),所以那個假期在CSDN回答問題可以用一個瘋狂來形容,當時基本上事每一個帖子都
7款個人覺得比較出色的Python IDE,你值得擁有!
Python作為一款比較“簡潔”的程式語言,它擁有很多價效比高的效能,造就了它現在比較火熱的局面,很多人都來學習Python。Python 的學習過程少不了 IDE 或者程式碼編輯器,或者整合的開發編輯器(IDE)。這些 Python 開發工具幫助開發者加快使用 Python 開發的速度,提高效率。
最全spring boot視訊系列,你值得擁有
==================================從零開始學Spring Boot視訊==================================【截止到2018.4.19共88課時】第二十章 Spring Boot 2.0:Quartz持久化:動態
7款公認比較出色的Python IDE,你值得擁有!
Python作為一款比較“簡潔”的程式語言,它擁有很多價效比高的效能,造就了它現在比較火熱的局面,很多人都來學習Python。Python 的學習過程少不了 IDE 或者程式碼編輯器,或者整合的開發編輯器(IDE)。這些 Python 開發工具幫助開發者加快使用 Python 開發的速度,提高效率。高效的程式
從原始碼中學習設計模式系列——單例模式序/反序列化以及反射攻擊的問題(二)
一、前言 這篇文章是學習單例模式的第二篇,之前的文章一下子就給出來看起來很高大上的實現方法,但是這種模式還是存在漏洞的,具體有什麼問題,大家可以停頓一會兒,思考一下。好了,不賣關子了,下面我們來看看每種單例模式存在的問題以及解決辦法。 二、每種Singleton 模式的演進 模式一
“一盤沙拉”帶你入門Dagger2(二)之帶引數怎麼辦
系列文章 如果被依賴類的建構函式帶有引數,要把這個引數的型別也管理起來 現在要在Salad裡新加入一個水果Orange,但是Orange的建構函式裡需要傳入一個Knife來
python讀取excel檔案中所有sheet表格:openpyxl模組(二)
通過openpyxl模組 迴圈遍歷excel檔案中所有sheet表格。 excel檔案 e:\\t.xlsx ,有2個sheet: sales 客戶編碼 年月 銷售額(萬元) JLF0001 20
利用Objective-C的反射機制和執行時特性實現類靜態方法的動態訪問(二)
繼上次的研究成果繼續深入研究,灑家又完善了下在執行時動態呼叫所有OC類方法的公用方法: typedef void*(*ObjcMsgSend)(id, SEL, ...); - (void *)invoke:(id)inst method:(NSString *)nam