.NET读写Excel工具Spire.Xls使用 重量级的Excel图表功能(5)
前一篇文章:“.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的类型。
//创建饼状图表 Chart chart = sheet.Charts.Add(ExcelChartType.Pie); //设置图表的数据范围,使用的也是和前面单元格获取的Range对象 chart.DataRange = sheet.Range["B2:B5"]; chart.SeriesDataFromRange = false; //设置图表的位置 chart.LeftColumn = 1;//图表左边列 chart.TopRow = 6;//图表上部的行 chart.RightColumn = 6;//图表右边列 chart.BottomRow = 18;//图表底部行 //图表标题 chart.ChartTitle = "饼形图例子"; //设置字体 chart.ChartTitleArea.IsBold = true; chart.ChartTitleArea.Size = 12; //初始化图例 Spire.Xls.Charts.ChartSerie cs = chart.Series[0]; //图表的标签目录数据 cs.CategoryLabels = sheet.Range["A2:A5"]; //图表的主要值,也就是饼状图的数据 cs.Values = sheet.Range["B2:B5"];
如下所示的效果:
2.3 生成折线图
线图是用直线段将各数据点连接起来而组成的图形,以折线方式显示数据的变化趋势。折线图可以显示随时间(根据常用比例设置)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势。在折线图中,类别数据沿水平轴均匀分布,所有值数据沿垂直轴均匀分布。在折线图中,数据是递增还是递减、增减的速率、增减的规律(周期性、螺旋性等)、峰值等特征都可以清晰地反映出来。所以,折线图常用来分析数据随时间的变化趋势,也可用来分析多组数据随时间变化的相互作用和相互影响。
使用Spire.Xls绘制折线图过程和上面的类型。但如果图例较多,就是设置稍微复杂一点。看一个例子:
//给Sheet对象添加一个图表对象,可以直接添加类型,也可以单独用ChartType赋值来添加 Chart chart = sheet.Charts.Add(); chart.ChartType = ExcelChartType.Line3D; //设置图表的数据范围 chart.DataRange = sheet.Range["A1:E5"]; //设置图表的保存位置,这个基本都差不多 chart.LeftColumn = 1; chart.TopRow = 6; chart.RightColumn = 7; chart.BottomRow = 22; //图表标题 chart.ChartTitle = "折线图例子"; //设置字体加粗和大小 chart.ChartTitleArea.IsBold = true; chart.ChartTitleArea.Size = 12; //设置横坐标的标题 chart.PrimaryCategoryAxis.Title = "月份"; chart.PrimaryCategoryAxis.Font.IsBold = true; chart.PrimaryCategoryAxis.TitleArea.IsBold = true; //设置纵坐标,也就是值 的标题 chart.PrimaryValueAxis.Title = "销售额"; chart.PrimaryValueAxis.HasMajorGridLines = false; chart.PrimaryValueAxis.TitleArea.TextRotationAngle = 90; chart.PrimaryValueAxis.MinValue = 1000; chart.PrimaryValueAxis.TitleArea.IsBold = true; //循环绘制不同国家的销售额折线图,有多个系列 foreach (Spire.Xls.Charts.ChartSerie cs in chart.Series) { cs.Format.Options.IsVaryColor = true; cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = true; }
实际的效果和原始数据如下图所示:
其他图表的过程都类似,可以在帮助文档中找到相关例子。
3.C#设置Excel图表
3.1 将图表保存为图片
Excel生成的图表是可以保存为图片的。在Spire.XLS中,这些操作已经变得非常简单。首先获取Workbook对象的SaveChartAsImage方法获取指定sheet中的所有图表。然后循环将图片对象依次保存即可,下面是主要代码:
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 位置调整
Excel中的图表的位置已经在前面介绍过,还有一个可以调整大小的功能。使用Width和Height方法直接设置大小即可。
chart.Width = 400; chart.Height = 250;
上面就是一些常规的操作和使用,总的来说还是比较简单,如果需要比较细致的,可以查看API文档,根据方法来所要的功能来找,实现起来也会很容易的。
[1].http://baike.haosou.com/doc/5449555-5687924.html
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- 问题系列之Java中删除有序List的重复数据——提供两种方法
- 二叉树的基本概念和遍历
- Java中MD5加密算法实现方法——附上具体代码
- 新手,Visual Studio 2015 配置Boost库,如何编译和选择,遇到无法打开文件“libboost_thread-vc140-mt-gd-1_63.lib“的解决办法
- Java中处理正则表达式的工具类——总有一个适合你
- 【Spark研究】用Apache Spark进行大数据处理第一部分:入门介绍
- “一切都是消息”--MSF(消息服务框架)入门简介
- 【Spark研究】用Apache Spark进行大数据处理第二部分:Spark SQL
- Android基础总结(2)——活动Activity
- Java实现的IP处理工具类——可用于项目
- 使用SQLServer同义词和SQL邮件,解决发布订阅中订阅库丢失数据的问题
- 一次误报引发的DNS检测方案的思考:DNS隧道检测平民解决方案
- Andriod基础——Adapter类
- ORM查询语言(OQL)简介--高级篇:脱胎换骨
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- tp5框架无刷新分页实现方法分析
- PHP与SQL语句写一句话木马总结
- golang实现php里的serialize()和unserialize()序列和反序列办法详解
- php和html的区别点详细总结
- 详解在YII2框架中使用UEditor编辑器发布文章
- 在Laravel的Model层做数据缓存的实现
- Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
- php连接mysql数据库最简单的实现方法
- 解决laravel id非自增 模型取回为0 的问题
- PHP7.0连接DB操作实例分析【基于mysqli】
- Laravel获取当前请求的控制器和方法以及中间件的例子
- laravel中数据显示方法(默认值和下拉option默认选中)
- laravel请求参数校验方法
- ThinkPHP 5.x远程命令执行漏洞复现
- 关于php开启错误提示的总结