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 ...
随机推荐
- URL 规范 整理
URL 规范 不用大写:(强制) 用中杠-不用下杠_:(强制) 参数列表要encode,编码使用utf-8:(强制) URI中的名词表示资源集合,使用复数形式.(建议) 增加版本号(建议) URI中统 ...
- Python3之利用Cookie模拟登录
Python3之利用Cookie模拟登录 利用Cookie模拟登录步骤: 1. 在浏览器输入http://demo.bxcker.com,输入用户名和密码登录. 2.登录成功点" ...
- 使用VirtualBox调试项目踩过的坑
当我们完成项目后 通常需要做其他系统的测试 例如win10下测试完成后要在win7中测试 这时,安装一个虚拟机是较为明智的选择 本文将讲述在使用虚拟机测试Unity发布的exe(所有的3D文件都适用) ...
- 加密原理介绍,代码实现DES、AES、RSA、Base64、MD5
阅读目录 github下载地址 一.DES对称加密 二.AES对称加密 三.RSA非对称加密 四.实际使用 五.关于Padding 关于电脑终端Openssl加密解密命令 关于网络安全的数据加密部分, ...
- 使用Iterator迭代器循环集合
1.Iterator迭代器用于遍历集合元素,获取迭代器可以使用. 2.Iterator提供了统一遍历集合元素的 方式 ,其提供了用于遍历集合的连个方法----- boolean hasNext()判 ...
- 令状态寄存器访问指令(MRS,MSR)
ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据. 针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器.每个位的含义如下图: 分成了4部分: 1,条件标志位 N(Negative) ...
- PAT1086:Tree Traversals Again
1086. Tree Traversals Again (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...
- PCA的数学原理(转)
PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...
- sklearn了解一下
sklearn是机器学习中一个常用的python第三方模块,网址:http://scikit-learn.org/stable/index.html ,里面对一些常用的机器学习方法进行了封装,在进行机 ...
- java.lang.OutOfMemoryError: PermGen space 解决办法
最近在学习spring mvc时,用了大量的第三方jar包,导致启动tomcat时报内存溢出的错 java.lang.OutOfMemoryError: PermGen space 解决办法:在mye ...