又一款Excel處理神器Spire.XLS,你值得擁有(二)
前言:上篇 C#組件系列——又一款Excel處理神器Spire.XLS,你值得擁有 介紹了下組件的兩個功能,說不上特色,但確實能解決我們項目中的一些實際問題,這兩天繼續研究了下這個組件,覺得有些功能用起來還是挺方便的,這篇繼續來看看Spire.XLS的一些其他功能,說不定有你需要的呢~~
本文原創地址:http://www.cnblogs.com/landeanfen/p/5906077.html
一、基礎入門
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、表格樣式
下面來一個奇偶行的樣式:

效果如下:
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; }
效果如下
九、總結
至此,組件的一些基礎功能介紹完畢。當然,這並不是全部,只是博主選的一些覺得或許有用的功能,更多功能可以參考官網文檔。
當然,如果本文能夠幫到你,還是希望園友們幫忙推薦,博主下次繼續努力!
本文原創出處:http://www.cnblogs.com/landeanfen/
歡迎各位轉載,但是未經作者本人同意,轉載文章之后必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利