1. 程式人生 > >【原創】.NET讀寫Excel工具Spire.Xls使用(5)重量級的Excel圖表功能

【原創】.NET讀寫Excel工具Spire.Xls使用(5)重量級的Excel圖表功能

  前一篇文章:“.NET讀寫Excel工具Spire.Xls使用(4)對資料操作與控制”給大家介紹了Spire.XLS對資料的控制相關功能,這一篇給大家介紹Spire.XLS最大的亮點所在,C#控制Excel生成圖表。將介紹C#生成不同型別圖表的方法,並介紹Excel圖表的相關操作,如調整大小,儲存圖片等操作的方法。

1.Excel中的圖表

  我們生活的這個世界是豐富多彩的,幾乎所有的知識都來自於視覺。也許無法記住一連串的數字,以及它們之間的關係和趨勢。但是可以很輕鬆地記住一幅圖畫或者一個曲線。因此由於使用圖表,會使得用Excel編制的工作表更易於理解和交流。Excel具有許多高階的製圖功能,同時使用起來也非常簡便。在本章中,我們將學習到建立一張簡單的圖表,再進行修飾,使圖表更加精緻,以及如何為圖形加上背景、圖注、正文等等。Excel中圖表是指將工作表中的資料用圖形表示出來。例如:將各地區每週的銷售用柱形圖顯示出來,見圖8-1的顯示。圖表可以使資料更加有趣、吸引人、易於閱讀和評價。它們也可以幫助我們分析和比較資料[1]。如下圖所示的圖表,看資料多累,看圖表就一目瞭然。。。

2.C#建立Excel圖表方法

2.1 Spire.Xls的圖表類

  在Spire.Xls元件中,生成圖表已經非常簡化了。只需要一個核心的Chart類,就可以增加圖表並進行輔助的一些設定。Spire.Xls定義支援的圖表型別,在列舉ExcelChartType型別中。目前一共有74種類型,可以使用物件瀏覽器大概看一下:  

  在實際的使用過程中,新增Excel圖表主要有以下幾個過程:

1.給指定的Sheet新增需要的Excel圖表的型別;

2.設定圖表所需要的資料範圍;

3.設定圖表的位置以及標題;

4.設定系列圖表以及座標軸的值。

  下面將使用C#和Spire.Xls元件做一個生成餅狀圖和折線圖的例子,看看基本的使用過程。

2.2 生成餅狀圖

  在工作中如果遇到需要計算總費用或金額的各個部分構成比例的情況,一般都是通過各個部分與總額相除來計算,而且這種比例表示方法很抽象,我們可以使用一種餅狀圖表工具,能夠直接以圖形的方式直接顯示各個組成部分所佔比例,在Excel中可以很方便的製作餅狀圖表。Spire.Xls中餅狀圖型別是ExcelChartType類中的Pie和Pie3D,為了效果很好看,我們可以使用3D的型別。

 1 //建立餅狀圖表
 2 Chart chart = sheet.Charts.Add(ExcelChartType.Pie);
 3 //設定圖表的資料範圍,使用的也是和前面單元格獲取的Range物件
4 chart.DataRange = sheet.Range["B2:B5"]; 5 chart.SeriesDataFromRange = false; 6 7 //設定圖表的位置 8 chart.LeftColumn = 1;//圖表左邊列 9 chart.TopRow = 6;//圖表上部的行 10 chart.RightColumn = 6;//圖表右邊列 11 chart.BottomRow = 18;//圖表底部行 12 13 //圖表標題 14 chart.ChartTitle = "餅形圖例子"; 15 //設定字型 16 chart.ChartTitleArea.IsBold = true; 17 chart.ChartTitleArea.Size = 12; 18 19 //初始化圖例 20 Spire.Xls.Charts.ChartSerie cs = chart.Series[0]; 21 //圖表的標籤目錄資料 22 cs.CategoryLabels = sheet.Range["A2:A5"]; 23 //圖表的主要值,也就是餅狀圖的資料 24 cs.Values = sheet.Range["B2:B5"];

如下所示的效果:

2.3 生成折線圖

  線圖是用直線段將各資料點連線起來而組成的圖形,以折線方式顯示資料的變化趨勢。折線圖可以顯示隨時間(根據常用比例設定)而變化的連續資料,因此非常適用於顯示在相等時間間隔下資料的趨勢。在折線圖中,類別資料沿水平軸均勻分佈,所有值資料沿垂直軸均勻分佈。在折線圖中,資料是遞增還是遞減、增減的速率、增減的規律(週期性、螺旋性等)、峰值等特徵都可以清晰地反映出來。所以,折線圖常用來分析資料隨時間的變化趨勢,也可用來分析多組資料隨時間變化的相互作用和相互影響。

  使用Spire.Xls繪製折線圖過程和上面的型別。但如果圖例較多,就是設定稍微複雜一點。看一個例子:

 1 //給Sheet物件新增一個圖表物件,可以直接新增型別,也可以單獨用ChartType賦值來新增
 2 Chart chart = sheet.Charts.Add();
 3 chart.ChartType = ExcelChartType.Line3D;
 4 
 5 //設定圖表的資料範圍
 6 chart.DataRange = sheet.Range["A1:E5"];
 7 
 8 //設定圖表的儲存位置,這個基本都差不多
 9 chart.LeftColumn = 1;
10 chart.TopRow = 6;
11 chart.RightColumn = 7;
12 chart.BottomRow = 22;
13 
14 //圖表標題
15 chart.ChartTitle = "折線圖例子";
16 //設定字型加粗和大小
17 chart.ChartTitleArea.IsBold = true;
18 chart.ChartTitleArea.Size = 12;
19 //設定橫座標的標題
20 chart.PrimaryCategoryAxis.Title = "月份";
21 chart.PrimaryCategoryAxis.Font.IsBold = true;
22 chart.PrimaryCategoryAxis.TitleArea.IsBold = true;
23 //設定縱座標,也就是值 的標題
24 chart.PrimaryValueAxis.Title = "銷售額";
25 chart.PrimaryValueAxis.HasMajorGridLines = false;
26 chart.PrimaryValueAxis.TitleArea.TextRotationAngle = 90;
27 chart.PrimaryValueAxis.MinValue = 1000;
28 chart.PrimaryValueAxis.TitleArea.IsBold = true;
29 //迴圈繪製不同國家的銷售額折線圖,有多個系列
30 foreach (Spire.Xls.Charts.ChartSerie cs in chart.Series)
31 {
32     cs.Format.Options.IsVaryColor = true;
33     cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = true;            
34 }

實際的效果和原始資料如下圖所示:

  其他圖表的過程都類似,可以在幫助文件中找到相關例子。

3.C#設定Excel圖表

3.1 將圖表儲存為圖片

  Excel生成的圖表是可以儲存為圖片的。在Spire.XLS中,這些操作已經變得非常簡單。首先獲取Workbook物件的SaveChartAsImage方法獲取指定sheet中的所有圖表。然後迴圈將圖片物件依次儲存即可,下面是主要程式碼:

1 Workbook workbook = new Workbook();
2 workbook.LoadFromFile("chart.xlsx", ExcelVersion.Version2010);
3 Worksheet sheet=workbook.Worksheets[0];
4 Image[] imgs = workbook.SaveChartAsImage(sheet);
5 for (int i = 0; i < imgs.Length; i++)
6 {
7     imgs[i].Save(string.Format("img-{0}.png", i), ImageFormat.Png);
8 }

3.2 位置調整

  Excel中的圖表的位置已經在前面介紹過,還有一個可以調整大小的功能。使用Width和Height方法直接設定大小即可。

1 chart.Width = 400;
2 chart.Height = 250;

  上面就是一些常規的操作和使用,總的來說還是比較簡單,如果需要比較細緻的,可以檢視API文件,根據方法來所要的功能來找,實現起來也會很容易的。

[1].http://baike.haosou.com/doc/5449555-5687924.html

相關推薦

原創.NETExcel工具Spire.Xls使用(3)單元格控制

  前一篇文章:“.NET讀寫Excel工具Spire.Xls使用(2)Excel檔案的控制”給大家介紹了C#使用Spire.XLS來控制Excel檔案的基本功能和相關實踐程式碼。這篇文章將重點介紹C#操作Excel檔案時,對Excel單元格的控制。   以前在使用NPOI的時候,其實印象最深的還是

原創.NETExcel工具Spire.Xls使用(1)入門介紹

  在.NET平臺,操作Excel檔案是一個非常常用的需求,目前比較常規的方法有以下幾種: 1.Office Com元件的方式:這個方式非常累人,微軟的東西總是這麼的複雜,使用起來可能非常不便,需要安裝Excel,對於伺服器,有時候還需要為配置IIS許可權。折騰人,看到很多人在群裡面使用這個東西,出現各種抓

原創.NETExcel工具Spire.Xls使用(2)Excel檔案的控制

  前一篇文章:“.NET操作Excel利器Spire.Xls使用(1)入門介紹 ”給大家介紹了Spire.XLS的基本功能和一些比較。這篇文章將重點介紹C#操作Excel檔案時,對Excel檔案本身的相關設定,全域性控制的內容。因為這也是C#讀寫Excel檔案時經常碰到的文章,也是我在使用過程中的一

原創.NETExcel工具Spire.Xls使用(4)對資料操作與控制

  Spire.Office for .NET是E-iceblue開發的一種企業級.NET Office編輯的軟體集合,包括Spire.Doc,Spire XLS,Spire.PDF,Spire.BarCode等等。.NET平臺的開發人員可以使用Spire.Office for .NET輕鬆的操作含有

原創.NETExcel工具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>

OSSBucket許可權

使用者建立的Bucket總共有三種許可權: /*私有 * 只允許自己讀寫操作,其他使用者沒有許可權 */ CannedAccessControlList acl_private = CannedAccessControlList.Private; /*公共讀寫

QtQSettings登錄檔、配置檔案

簡述 一般情況下,我們在開發軟體過程中,都會快取一些資訊到本地,可以使用輕量級資料庫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元件,並

MFCVCini檔案

可以用於載入時,讀取上一次的紀錄。 一:寫ini配置檔案: //獲取exe路徑 CString strPath; GetModuleFileName(NULL,strPath.GetBufferSetLength(MAX_PATH+1),M

delphitxt檔案

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自己控制的

原創EXCEL公式經驗(7)---EXCLE一般都是返回單個值得,如何公式返回多個匹配值?

  (1)一般excel都只能在一個單元格,且是輸入公式的這個單元格,返回一個值 (2)少數情況,可以在這個一單元格返回多個值 (3)現在考慮的是,輸入公式後,可以返回多個值    看起來公式還是遵循了(1)原則   INDEX($A:$A

原創POI操作Excel導入導出工具類ExcelUtil

表頭 println bottom ktr factory eof git reflect 解決 關於本類線程安全性的解釋: 多數工具方法不涉及共享變量問題,至於添加合並單元格方法addMergeArea,使用ThreadLocal變量存儲合並數據,ThreadLocal