.NET讀寫Excel工具Spire.Xls使用 重量級的Excel圖表功能(5)
前一篇文章:“.NET讀寫Excel工具Spire.Xls使用(4)對數(shù)據(jù)操作與控制”給大家介紹了Spire.XLS對數(shù)據(jù)的控制相關(guān)功能,這一篇給大家介紹Spire.XLS最大的亮點(diǎn)所在,C#控制Excel生成圖表。將介紹C#生成不同類型圖表的方法,并介紹Excel圖表的相關(guān)操作,如調(diào)整大小,保存圖片等操作的方法。
1.Excel中的圖表
我們生活的這個(gè)世界是豐富多彩的,幾乎所有的知識都來自于視覺。也許無法記住一連串的數(shù)字,以及它們之間的關(guān)系和趨勢。但是可以很輕松地記住一幅圖畫或者一個(gè)曲線。因此由于使用圖表,會使得用Excel編制的工作表更易于理解和交流。Excel具有許多高級的制圖功能,同時(shí)使用起來也非常簡便。在本章中,我們將學(xué)習(xí)到建立一張簡單的圖表,再進(jìn)行修飾,使圖表更加精致,以及如何為圖形加上背景、圖注、正文等等。Excel中圖表是指將工作表中的數(shù)據(jù)用圖形表示出來。例如:將各地區(qū)每周的銷售用柱形圖顯示出來,見圖8-1的顯示。圖表可以使數(shù)據(jù)更加有趣、吸引人、易于閱讀和評價(jià)。它們也可以幫助我們分析和比較數(shù)據(jù)[1]。如下圖所示的圖表,看數(shù)據(jù)多累,看圖表就一目了然。。。
2.C#創(chuàng)建Excel圖表方法
2.1 Spire.Xls的圖表類
在Spire.Xls組件中,生成圖表已經(jīng)非常簡化了。只需要一個(gè)核心的Chart類,就可以增加圖表并進(jìn)行輔助的一些設(shè)置。Spire.Xls定義支持的圖表類型,在枚舉ExcelChartType類型中。目前一共有74種類型,可以使用對象瀏覽器大概看一下:
在實(shí)際的使用過程中,添加Excel圖表主要有以下幾個(gè)過程:
1.給指定的Sheet添加需要的Excel圖表的類型;
2.設(shè)置圖表所需要的數(shù)據(jù)范圍;
3.設(shè)置圖表的位置以及標(biāo)題;
4.設(shè)置系列圖表以及坐標(biāo)軸的值。
下面將使用C#和Spire.Xls組件做一個(gè)生成餅狀圖和折線圖的例子,看看基本的使用過程。
2.2 生成餅狀圖
在工作中如果遇到需要計(jì)算總費(fèi)用或金額的各個(gè)部分構(gòu)成比例的情況,一般都是通過各個(gè)部分與總額相除來計(jì)算,而且這種比例表示方法很抽象,我們可以使用一種餅狀圖表工具,能夠直接以圖形的方式直接顯示各個(gè)組成部分所占比例,在Excel中可以很方便的制作餅狀圖表。Spire.Xls中餅狀圖類型是ExcelChartType類中的Pie和Pie3D,為了效果很好看,我們可以使用3D的類型。
//創(chuàng)建餅狀圖表 Chart chart = sheet.Charts.Add(ExcelChartType.Pie); //設(shè)置圖表的數(shù)據(jù)范圍,使用的也是和前面單元格獲取的Range對象 chart.DataRange = sheet.Range["B2:B5"]; chart.SeriesDataFromRange = false; //設(shè)置圖表的位置 chart.LeftColumn = 1;//圖表左邊列 chart.TopRow = 6;//圖表上部的行 chart.RightColumn = 6;//圖表右邊列 chart.BottomRow = 18;//圖表底部行 //圖表標(biāo)題 chart.ChartTitle = "餅形圖例子"; //設(shè)置字體 chart.ChartTitleArea.IsBold = true; chart.ChartTitleArea.Size = 12; //初始化圖例 Spire.Xls.Charts.ChartSerie cs = chart.Series[0]; //圖表的標(biāo)簽?zāi)夸洈?shù)據(jù) cs.CategoryLabels = sheet.Range["A2:A5"]; //圖表的主要值,也就是餅狀圖的數(shù)據(jù) cs.Values = sheet.Range["B2:B5"];
如下所示的效果:
2.3 生成折線圖
線圖是用直線段將各數(shù)據(jù)點(diǎn)連接起來而組成的圖形,以折線方式顯示數(shù)據(jù)的變化趨勢。折線圖可以顯示隨時(shí)間(根據(jù)常用比例設(shè)置)而變化的連續(xù)數(shù)據(jù),因此非常適用于顯示在相等時(shí)間間隔下數(shù)據(jù)的趨勢。在折線圖中,類別數(shù)據(jù)沿水平軸均勻分布,所有值數(shù)據(jù)沿垂直軸均勻分布。在折線圖中,數(shù)據(jù)是遞增還是遞減、增減的速率、增減的規(guī)律(周期性、螺旋性等)、峰值等特征都可以清晰地反映出來。所以,折線圖常用來分析數(shù)據(jù)隨時(shí)間的變化趨勢,也可用來分析多組數(shù)據(jù)隨時(shí)間變化的相互作用和相互影響。
使用Spire.Xls繪制折線圖過程和上面的類型。但如果圖例較多,就是設(shè)置稍微復(fù)雜一點(diǎn)??匆粋€(gè)例子:
//給Sheet對象添加一個(gè)圖表對象,可以直接添加類型,也可以單獨(dú)用ChartType賦值來添加 Chart chart = sheet.Charts.Add(); chart.ChartType = ExcelChartType.Line3D; //設(shè)置圖表的數(shù)據(jù)范圍 chart.DataRange = sheet.Range["A1:E5"]; //設(shè)置圖表的保存位置,這個(gè)基本都差不多 chart.LeftColumn = 1; chart.TopRow = 6; chart.RightColumn = 7; chart.BottomRow = 22; //圖表標(biāo)題 chart.ChartTitle = "折線圖例子"; //設(shè)置字體加粗和大小 chart.ChartTitleArea.IsBold = true; chart.ChartTitleArea.Size = 12; //設(shè)置橫坐標(biāo)的標(biāo)題 chart.PrimaryCategoryAxis.Title = "月份"; chart.PrimaryCategoryAxis.Font.IsBold = true; chart.PrimaryCategoryAxis.TitleArea.IsBold = true; //設(shè)置縱坐標(biāo),也就是值 的標(biāo)題 chart.PrimaryValueAxis.Title = "銷售額"; chart.PrimaryValueAxis.HasMajorGridLines = false; chart.PrimaryValueAxis.TitleArea.TextRotationAngle = 90; chart.PrimaryValueAxis.MinValue = 1000; chart.PrimaryValueAxis.TitleArea.IsBold = true; //循環(huán)繪制不同國家的銷售額折線圖,有多個(gè)系列 foreach (Spire.Xls.Charts.ChartSerie cs in chart.Series) { cs.Format.Options.IsVaryColor = true; cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = true; }
實(shí)際的效果和原始數(shù)據(jù)如下圖所示:
其他圖表的過程都類似,可以在幫助文檔中找到相關(guān)例子。
3.C#設(shè)置Excel圖表
3.1 將圖表保存為圖片
Excel生成的圖表是可以保存為圖片的。在Spire.XLS中,這些操作已經(jīng)變得非常簡單。首先獲取Workbook對象的SaveChartAsImage方法獲取指定sheet中的所有圖表。然后循環(huán)將圖片對象依次保存即可,下面是主要代碼:
Workbook workbook = new Workbook(); workbook.LoadFromFile("chart.xlsx", ExcelVersion.Version2010); Worksheet sheet=workbook.Worksheets[0]; Image[] imgs = workbook.SaveChartAsImage(sheet); for (int i = 0; i < imgs.Length; i++) { imgs[i].Save(string.Format("img-{0}.png", i), ImageFormat.Png); }
3.2 位置調(diào)整
Excel中的圖表的位置已經(jīng)在前面介紹過,還有一個(gè)可以調(diào)整大小的功能。使用Width和Height方法直接設(shè)置大小即可。
chart.Width = 400; chart.Height = 250;
上面就是一些常規(guī)的操作和使用,總的來說還是比較簡單,如果需要比較細(xì)致的,可以查看API文檔,根據(jù)方法來所要的功能來找,實(shí)現(xiàn)起來也會很容易的。
[1].http://baike.haosou.com/doc/5449555-5687924.html
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
asp.net 使用js分頁實(shí)現(xiàn)異步加載數(shù)據(jù)
這篇文章主要介紹了asp.net使用js分頁實(shí)現(xiàn)異步加載數(shù)據(jù),需要的朋友可以參考下2014-04-04寫一個(gè)含數(shù)字,拼音,漢字的驗(yàn)證碼生成類
本文和大家分享的是一個(gè)集成1:小寫拼音;2:大寫拼音;3:數(shù)字;4:漢字的驗(yàn)證碼生成類。本章例子也會有一個(gè)mvc使用驗(yàn)證碼校驗(yàn)的場景。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01asp.net core下給網(wǎng)站做安全設(shè)置的方法詳解
這篇文章主要給大家介紹了關(guān)于asp.net core下給網(wǎng)站做安全設(shè)置的相關(guān)資料,文章通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07使用正則Regex來移除網(wǎng)頁的EnableViewState實(shí)現(xiàn)思路及代碼
創(chuàng)建好網(wǎng)頁時(shí),什么都沒有寫,但運(yùn)行時(shí)會發(fā)現(xiàn)源程序(View Source),下面一段,此刻,也許你會想起,在網(wǎng)頁有一個(gè)屬性EnableViewState,在某些時(shí)候我們并不需要它,接下來將介紹如何移除它,感興趣的朋友可以了解下啊2013-01-01使用JavaScript代碼實(shí)現(xiàn)各種數(shù)據(jù)控件的反選功能 不要只做拖控件的菜鳥
在我們做許多項(xiàng)目的時(shí)候,會用到反選這個(gè)功能,但是我一般使用C#代碼創(chuàng)建數(shù)組遍歷實(shí)現(xiàn)功能,今天我想換一種語言實(shí)現(xiàn)一下,于是我就用JavaScript研究了一下怎么實(shí)現(xiàn)這個(gè)功能2011-12-12asp.net 操作excel的實(shí)現(xiàn)代碼
用asp.net操作excel的實(shí)現(xiàn)代碼,一直都是本人所喜歡的,從網(wǎng)上搜了下ASP.NET Excel找到了這篇好文章2008-02-02獲取Repeter的Item和ItemIndex/CommandArgument實(shí)現(xiàn)思路與代碼
Repeater控件,放在ItemTemplate內(nèi)的銨鈕OnClick之后,獲取Repeater的Item,ItemIndex,CommandArgument,CommandName以及綁定的字段值附演示動畫感興趣的朋友可以了解下2013-01-01