C# 创建含多层分类标签的Excel图表
相较于数据,图表更能直观的体现数据的变化趋势。在数据表格中,同一数据值,可能同时代表不同的数据分类,表现在图表中则是一个数据体现在多个数据分类标签下。通常生成的图表一般默认只有一种分类标签,下面的方法将通过编程的方式来介绍在Excel中如何来生成含多层分类标签的图表。
使用工具:Spire.XLS for .NET
1.通过官网(https://www.e-iceblue.cn/Introduce/Spire-XLS-NET.html )下载安装包--解压-安装。在程序中添加引用Spire.XLS.dll,dll文件在安装路径下的bin文件夹中。
2.通过 Nuget 官网。(http://www.nuget.org/packages/Spire.XLS/ )
添加引用完成后,如下图:

C#示例代码
Step1:创建工作表
//创建Workbook实例,获取工作表
Workbook wb = new Workbook();
Worksheet sheet = wb.Worksheets[];
Step2:写入数据到表格
sheet.Range["A2"].Text = "出口前";
sheet.Range["A5"].Text = "出口后";
sheet.Range["B1"].Text = "年份";
sheet.Range["B2"].Text = "2017年";
sheet.Range["B6"].Text = "2018年";
sheet.Range["C1"].Text = "季度";
sheet.Range["C2"].Text = "1季度";
sheet.Range["C3"].Text = "2季度";
sheet.Range["C4"].Text = "3季度";
sheet.Range["C5"].Text = "4季度";
sheet.Range["C6"].Text = "1季度";
sheet.Range["C7"].Text = "2季度";
sheet.Range["C8"].Text = "3季度";
sheet.Range["C9"].Text = "4季度";
sheet.Range["D1"].Text = "季度产量\n(万吨)";
sheet.Range["D2"].Value = "1.56";
sheet.Range["D3"].Value = "2.3";
sheet.Range["D4"].Value = "3.21";
sheet.Range["D5"].Value = "3.5";
sheet.Range["D6"].Value = "4.8";
sheet.Range["D7"].Value = "5.2";
sheet.Range["D8"].Value = "5.79";
sheet.Range["D9"].Value = "5.58";
Step3:合并单元格并设置单元格对齐方式
sheet.Range["A2:A4"].Merge();
sheet.Range["A5:A9"].Merge();
sheet.Range["B2:B5"].Merge();
sheet.Range["B6:B9"].Merge();
sheet.Range["A1:D9"].Style.HorizontalAlignment = HorizontalAlignType.Center;
sheet.Range["A1:D9"].Style.VerticalAlignment = VerticalAlignType.Center;
Step4:添加图表到Excel
//添加柱状图表
Chart chart = sheet.Charts.Add(ExcelChartType.LineMarkers);
chart.ChartTitle = "季度产量(万吨)";//设置图表标题
chart.PlotArea.Fill.FillType = ShapeFillType.NoFill; //不填充绘图区域(默认填充灰色)
chart.Legend.Delete();//删除图例 //指定柱状图表在工作表中的位置及宽度
chart.LeftColumn = ;
chart.TopRow = ;
chart.RightColumn = ; //设置图表系列数据来源
chart.DataRange = sheet.Range["D2:D9"];
chart.SeriesDataFromRange = false;
chart.Series[].DataPoints.DefaultDataPoint.DataLabels.HasValue = true;
chart.Series[].Format.LineProperties.Color = Color.BlueViolet; //设置系列分类标签数据来源
ChartSerie serie = chart.Series[];
serie.CategoryLabels = sheet.Range["A2:C9"];
Step5:设置是否显示多层分类标签
chart.PrimaryCategoryAxis.MultiLevelLable = true;
Step6: 保存文档
wb.SaveToFile("output.xlsx", ExcelVersion.Version2013);
图表创建结果:

全部代码:
using Spire.Xls;
using Spire.Xls.Charts;
using System.Drawing; namespace ChartWithMultiLevelCategoryLabels_XLS
{
class Program
{
static void Main(string[] args)
{
//创建Workbook实例,获取工作表
Workbook wb = new Workbook();
Worksheet sheet = wb.Worksheets[]; //写入数据到工作表
sheet.Range["A2"].Text = "出口前";
sheet.Range["A5"].Text = "出口后";
sheet.Range["B1"].Text = "年份";
sheet.Range["B2"].Text = "2017年";
sheet.Range["B6"].Text = "2018年";
sheet.Range["C1"].Text = "季度";
sheet.Range["C2"].Text = "1季度";
sheet.Range["C3"].Text = "2季度";
sheet.Range["C4"].Text = "3季度";
sheet.Range["C5"].Text = "4季度";
sheet.Range["C6"].Text = "1季度";
sheet.Range["C7"].Text = "2季度";
sheet.Range["C8"].Text = "3季度";
sheet.Range["C9"].Text = "4季度";
sheet.Range["D1"].Text = "季度产量\n(万吨)";
sheet.Range["D2"].Value = "1.56";
sheet.Range["D3"].Value = "2.3";
sheet.Range["D4"].Value = "3.21";
sheet.Range["D5"].Value = "3.5";
sheet.Range["D6"].Value = "4.8";
sheet.Range["D7"].Value = "5.2";
sheet.Range["D8"].Value = "5.79";
sheet.Range["D9"].Value = "5.58"; //合并单元格,设置单元格对齐方式
sheet.Range["A2:A4"].Merge();
sheet.Range["A5:A9"].Merge();
sheet.Range["B2:B5"].Merge();
sheet.Range["B6:B9"].Merge();
sheet.Range["A1:D9"].Style.HorizontalAlignment = HorizontalAlignType.Center;
sheet.Range["A1:D9"].Style.VerticalAlignment = VerticalAlignType.Center; //添加柱状图表
Chart chart = sheet.Charts.Add(ExcelChartType.LineMarkers);
chart.ChartTitle = "季度产量(万吨)";//设置图表标题
chart.PlotArea.Fill.FillType = ShapeFillType.NoFill; //不填充绘图区域(默认填充灰色)
chart.Legend.Delete();//删除图例 //指定柱状图表在工作表中的位置及宽度
chart.LeftColumn = ;
chart.TopRow = ;
chart.RightColumn = ; //设置图表系列数据来源
chart.DataRange = sheet.Range["D2:D9"];
chart.SeriesDataFromRange = false;
chart.Series[].DataPoints.DefaultDataPoint.DataLabels.HasValue = true;
chart.Series[].Format.LineProperties.Color = Color.BlueViolet; //设置系列分类标签数据来源
ChartSerie serie = chart.Series[];
serie.CategoryLabels = sheet.Range["A2:C9"]; //显示多层分类标签
chart.PrimaryCategoryAxis.MultiLevelLable = true; //保存文档
wb.SaveToFile("output.xlsx", ExcelVersion.Version2013);
System.Diagnostics.Process.Start("output.xlsx");
}
}
}
(本文完)
C# 创建含多层分类标签的Excel图表的更多相关文章
- 【原创】.NET读写Excel工具Spire.Xls使用(5)重量级的Excel图表功能
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
- Excel图表转成图片
关于excel 图表转成图片 知识点:excel 生成的图表不是图片 尝试. 通过Java调用POI接口挺难把excel生成的图表转成图片导出来 ps. 其它生成图表的工具,如jfre ...
- vba控制图表,excel图表,一键完成
来源http://club.excelhome.net/thread-1417686-1-1.html 官方教程链接 https://docs.microsoft.com/zh-cn/office/v ...
- 如何不让Excel图表随源数据改变而改变
如何不让Excel图表随源数据改变而改变 一般我们在用Excel时,经常会碰到一些问题,比如,如何才能不让Excel图表随源数据改变而改变呢,下面就谈一下,一般在默认情况下,Excel的图表在一个区域 ...
- Python绘制Excel图表
今天讲解下如何使用Python绘制各种Excel图表,下面我们以绘制饼状图.柱状图.水平图.气泡图.2D面积图.3D面积图为例来说明. import openpyxlfrom openpyxl imp ...
- EXCEL 图表 只在拐点的时候显示数字
EXCEL图表只在折线的拐点显示数值,中间不需要显示.同时往下拐的,显示在上方,往上的显示在下方,这样数值不会挡住线. 首先,做一些模拟数据 因为起点和终点数值必须显示,所以单元格,C2 D2 C19 ...
- JAVA生成EXCEL图表
跟据客户的要求,需要开发一套包括图形的报表,还需要导出WORD 图表需要这样: 这样: 这样: 还有这样: 接下来是实现思路: 以往用的最多的就是JFreechart,手上也有实现各种图形的资源,但是 ...
- 《Excel图表之道》读书笔记
一.突破常规的作图方法 突破Excel的默认颜色 非数据元素用淡色 突破Excel的图表布局 图表要素:主标题.副标题.图例.绘图.脚注 竖向构图 标明数据来源.图表注释.坐标轴截断符号 专业的水蓝色 ...
- JAVA用POI读取和创建2003和2007版本Excel完美示例
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
随机推荐
- 115个Java面试题和答案——终极列表(下)【转】
第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servle ...
- Python之路,进程、线程、协程篇
本节内容 进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- JS的事件绑定、事件流模型
.t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.JS事件 (一)JS事件分类 1.鼠标事件:click/dbclick ...
- 第六章 MySQL 查询
查询数据表 语法: SELECT {* | <字段列表>} [ FROM <表1>, <表2>.... [ where <表达式> ] [ group ...
- java 引用数据类型(类)
我们可以把类的类型为两种: 第一种,Java为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供我们使用. 第二种,我们自己创建的类,按照类的定义标准, ...
- 在 Docker 容器中运行应用程序
案例说明 运行 3 个容器,实现对网站的监控. 三个容器的说明: 容器 web: 创建自 nginx 映像,使用 80 端口,运行于后台,实现 web 服务. 容器 mailer: 该容器中运行一个 ...
- 超实用的JavaScript代码段 Item1 --倒计时效果
现今团购网.电商网.门户网等,常使用时间记录重要的时刻,如时间显示.倒计时差.限时抢购等,本文分析不同倒计时效果的计算思路及方法,掌握日期对象Date,获取时间的方法,计算时差的方法,实现不同的倒时计 ...
- logger.go
package app //日志接口 type Logger interface { Output(maxdepth int, s string) error }
- Elasticsearch笔记五之java操作es
Java操作es集群步骤1:配置集群对象信息:2:创建客户端:3:查看集群信息 1:集群名称 默认集群名为elasticsearch,如果集群名称和指定的不一致则在使用节点资源时会报错. 2:嗅探功能 ...
- Go性能优化小结
1 内存优化 1.1 小对象合并成结构体一次分配,减少内存分配次数 做过C/C++的同学可能知道,小对象在堆上频繁地申请释放,会造成内存碎片(有的叫空洞),导致分配大的对象时无法申请到连续的内存空间, ...