相较于数据,图表更能直观的体现数据的变化趋势。在数据表格中,同一数据值,可能同时代表不同的数据分类,表现在图表中则是一个数据体现在多个数据分类标签下。通常生成的图表一般默认只有一种分类标签,下面的方法将通过编程的方式来介绍在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图表的更多相关文章

  1. 【原创】.NET读写Excel工具Spire.Xls使用(5)重量级的Excel图表功能

                  本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...

  2. Excel图表转成图片

    关于excel 图表转成图片 知识点:excel 生成的图表不是图片 尝试.    通过Java调用POI接口挺难把excel生成的图表转成图片导出来 ps.      其它生成图表的工具,如jfre ...

  3. vba控制图表,excel图表,一键完成

    来源http://club.excelhome.net/thread-1417686-1-1.html 官方教程链接 https://docs.microsoft.com/zh-cn/office/v ...

  4. 如何不让Excel图表随源数据改变而改变

    如何不让Excel图表随源数据改变而改变 一般我们在用Excel时,经常会碰到一些问题,比如,如何才能不让Excel图表随源数据改变而改变呢,下面就谈一下,一般在默认情况下,Excel的图表在一个区域 ...

  5. Python绘制Excel图表

    今天讲解下如何使用Python绘制各种Excel图表,下面我们以绘制饼状图.柱状图.水平图.气泡图.2D面积图.3D面积图为例来说明. import openpyxlfrom openpyxl imp ...

  6. EXCEL 图表 只在拐点的时候显示数字

    EXCEL图表只在折线的拐点显示数值,中间不需要显示.同时往下拐的,显示在上方,往上的显示在下方,这样数值不会挡住线. 首先,做一些模拟数据 因为起点和终点数值必须显示,所以单元格,C2 D2 C19 ...

  7. JAVA生成EXCEL图表

    跟据客户的要求,需要开发一套包括图形的报表,还需要导出WORD 图表需要这样: 这样: 这样: 还有这样: 接下来是实现思路: 以往用的最多的就是JFreechart,手上也有实现各种图形的资源,但是 ...

  8. 《Excel图表之道》读书笔记

    一.突破常规的作图方法 突破Excel的默认颜色 非数据元素用淡色 突破Excel的图表布局 图表要素:主标题.副标题.图例.绘图.脚注 竖向构图 标明数据来源.图表注释.坐标轴截断符号 专业的水蓝色 ...

  9. JAVA用POI读取和创建2003和2007版本Excel完美示例

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

随机推荐

  1. Django入门三之urls.py重构及参数传递

    1. 内部重构 2. 外部重构 website/blog/urls.py website/website/urls.py 3. 两种参数处理方式 -1. blog/index/?id=1234& ...

  2. 定制炫彩界面:duilib与MFC 的对比

    duilib是以DirectUI为技术原理开发的一款轻量级Windows桌面UI库,使用XML来描述界面风格,界面布局,可以很方便的构建高效,绚丽的,非常易于扩展的界面.从而很好的将界面和逻辑分离,同 ...

  3. 洛谷 P3177 树上染色 解题报告

    P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...

  4. Spring中资源的加载ResourceLoader

    http://blog.csdn.net/u011955252/article/details/52912571

  5. Swift-函数学习

    函数:函数是独立的代码块,执行特定的任务. Swift 的统一函数语法足够灵活,能表达没有参数名称的简单的 C 型函数的任何东西,本地和外部复杂 Objective-C-style 方法参数名称为每个 ...

  6. 关于mui 中popover与下拉刷新冲突问题

    最近用mui做app混合式开发时,作为一个后端开发,高前端确实有点吃了,期间遇到的问题肯定也不少.这两天app做更新,为了装逼,将更新的提示搞得好看些,用到了mui中的popover,结果把自己整死了 ...

  7. Project facet Java version 1.8 not supported JDK版本不对无法启动项目解决办法

    https://jingyan.baidu.com/article/6c67b1d69a59a02787bb1e30.html

  8. tkinter中checkbutton多选框控件和variable用法(六)

    checkbutton控件 简单的实现多选: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry ...

  9. range与enumerate的区别

    在迭代中enumerate比range更能灵活,一般情况下尽量用erumerate,下面举例说明: 先来看range的使用: city_list = ['beijing', 'shanghai', ' ...

  10. 你不知道的JavaScript--Item5 全局变量

    1.尽量少用全局对象 全局变量的问题在于,你的JavaScript应用程序和web页面上的所有代码都共享了这些全局变量,他们住在同一个全局命名空间,所以当程序的两个不同部分定义同名但不同作用的全局变量 ...