C#組件系列——又一款Excel處理神器Spire.XLS,你值得擁有(二)

 

正文ide

前言:上篇 C#組件系列——又一款Excel處理神器Spire.XLS,你值得擁有(一) 介紹了下組件的兩個功能,說不上特點,但確實能解決咱們項目中的一些實際問題,這兩天繼續研究了下這個組件,以爲有些功能用起來仍是挺方便的,這篇繼續來看看Spire.XLS的一些其餘功能,說不定有你須要的呢~~post

本文原創地址:http://www.cnblogs.com/landeanfen/p/5906077.html字體

1、基礎入門

一、新建Workbook

 Spire.XLS提供了多種方式建立Workbook對象this

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文件spa

1.二、根據物理路徑生成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.三、根據文件流生成Workbook

上篇咱們演示過屢次,對於Web裏面的文件上傳,多用此方法。3d

//獲得當前請求的文件
var oFile = Request.Files["txt_file"];

//根據當前的文件流生成Workbook對象
Workbook book = new Workbook();
book.LoadFromStream(oFile.InputStream);

1.四、根據Excel模板生成Workbook

這種用法適用於項目須要使用Excel模板的時候,好比咱們項目須要導出的每個Excel都適用以下模板:excel

那麼,咱們每次生成Excel的時候能夠根據該模板去建立Workbookcode

//新建Workbook
Workbook workbook = new Workbook();
//根據模板生成Workbook
workbook.LoadTemplateFromFile(@"D:\Data\Upload\Template.xlsx");

這樣獲得的Excel文件將會自動套用該模板樣式。orm

二、讀寫Workbook

2.一、根據單元格的名稱框來讀寫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.二、根據單元格的行列索引來讀寫Excel

除了上面的方式,組件還支持經過行列的索引去給單元格取賦值。

sheet.Range[1, 1].Text = "部門名稱";

以上一句表示給第一個行第一列單元格賦值。

三、保存Workbook

關於Excel的保存,組件一樣提供了多種方式。

3.一、直接保存的方式: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.二、保存而且轉換文件

上篇介紹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頁的索引;第2、三個參數表示生成圖片的X和Y的值。

保存爲xml

workbook.SaveAsXml(strFullName);

保存到文件流

using (var stream = new FileStream(strFullName, FileMode.Create))
{
    workbook.SaveToStream(stream);
} 

2、樣式

一、文本樣式

設置單元格字體樣式

複製代碼
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;//字體大小
複製代碼

獲得結果

二、單元格樣式

關於單元格樣式設置

複製代碼
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;
複製代碼

三、表格樣式

下面來一個奇偶行的樣式:

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()

效果以下:

四、富文本編輯框

除了上面的一些簡單樣式外,組件還提供了富文本的編輯方式

複製代碼
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);
複製代碼

效果

固然,這個功能可能在一些特定的場合纔會用上。

3、凍結行列

組件提供了很是方便凍結行列的功能。

一、凍結行

sheet.FreezePanes(2, 1);

獲得結果

二、凍結列

sheet.FreezePanes(1, 2);

獲得結果

代碼釋疑:這裏的兩個參數怎麼理解,第一個參數rowIndex,第二個參數columnIndex。爲何sheet.FreezePanes(2, 1)能凍結首行?這裏博主的理解是這裏的參數設置的是開始滑動的行和列。也就是說FreezePanes(2,1)表示從第二行、第一列開始能夠滑動,而FreezePanes(1,2)表示從第一行、第二列開始能夠滑動。這樣是否是會好理解一點。

4、合併單元格

關於單元格的合併,組件使用也還算方便。

var mergecolumn = sheet.Merge(sheet.Range[1, 2], sheet.Range[1, 3]);
mergecolumn.VerticalAlignment = VerticalAlignType.Center;
mergecolumn.HorizontalAlignment = HorizontalAlignType.Center;
mergecolumn.Text = "第一個合併的單元格" ;

獲得結果

5、選項過濾功能

組件提供了方便的組件過濾功能

sheet.AutoFilters.Range = sheet.Range["A1:C1"];

以上表示對A1到C1這個區域的全部文本框進行過濾。效果以下:

6、下拉框

在Excel裏面,常常須要用到的一個功能就是在編輯單元格的時候使用下拉框,這樣方便了一些特定項的編輯。一樣,組件也爲咱們提供了這個功能

//下拉框
CellRange range = sheet.Range["A2:A6"];
//給E1到E10全部的單元格添加下拉選項,數據來源是A2到A6的值
sheet.Range["E1:E10"].DataValidation.DataRange = range;

效果以下:

7、顯示、隱藏行列

對於行列隱藏也算是一個經常使用功能,方法以下

//顯示、隱藏行列
sheet.HideColumn(10);
sheet.HideRow(8);
//sheet.ShowColumn(10);
//sheet.ShowRow(7);

效果

8、搜索結果高亮

foreach (CellRange range in sheet.FindAllString("行政部", true, true))
{
       range.Style.Color = Color.LawnGreen;
}

效果以下

9、總結

至此,組件的一些基礎功能介紹完畢。固然,這並非所有,只是博主選的一些以爲或許有用的功能,更多功能能夠參考官網文檔。

固然,若是本文可以幫到你,仍是但願園友們幫忙推薦,博主下次繼續努力!

本文原創出處:http://www.cnblogs.com/landeanfen/

歡迎各位轉載,可是未經做者本人贊成,轉載文章以後必須在文章頁面明顯位置給出做者和原文鏈接,不然保留追究法律責任的權利

 

出處:http://www.cnblogs.com/landeanfen/p/5906077.html

相關文章
相關標籤/搜索