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

    1.基本类型和引用类型 在C语言里面,是有指针这么一个变量类型的,指针变量保存的就是所要指向内容的地址.在Java里面,没有了指针的这么个说法,而是换了一个词:引用类型变量. 先说Java里面的基本类 ...

  2. 微信二维码支付-模式一(PC端,解决中文乱码问题)

    近期公司调完银联,调支付宝,调完支付宝调微信.说实话微信的帮助文档确实是烂,而且有没有技术支持,害的我头发都掉了一桌.不说废话了,看代码. 首先登陆微信的公众平台(微信的服务号不是订阅号),然后选择微 ...

  3. JAVA远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)

    RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果.这个请求包括一个参数集和一个文本集,通常形成&qu ...

  4. [ SSH框架 ] Spring框架学习之二(Bean的管理和AOP思想)

    一.Spring的Bean管理(注解方式) 1.1 什么是注解 要使用注解方式实现Spring的Bean管理,首先要明白什么是注解.通俗地讲,注解就是代码里的特殊标记,使用注解可以完成相应功能. 注解 ...

  5. C3垂直居中均分

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. HTML学习之制作导航网页

    前言 今天用HTML写了一个网址导航,源代码如下: <html> <head> <title>网址导航</title> </head> &l ...

  7. Invalid character found in method name. HTTP method names must be tokens

      o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header Note: further occurrenc ...

  8. vritualenv虚拟环境迁移

    vritualenv虚拟环境迁移的简单步骤: 1.进入原虚拟环境env1,然后执行pip freeze > requirements.txt将包依赖信息保存在requirements.txt文件 ...

  9. 26.app后端怎么架设推送服务

    推送服务已经是app的标配了.架设推送服务,除了可以使用第三方服务商外,也有大量的开源技术可以选择. 现在推送主要分两块,android推送和ios推送,在下面分别论述: 1.    Android推 ...

  10. Spring Boot中使用MyBatis注解配置详解(1)

    之前在Spring Boot中整合MyBatis时,采用了注解的配置方式,相信很多人还是比较喜欢这种优雅的方式的,也收到不少读者朋友的反馈和问题,主要集中于针对各种场景下注解如何使用,下面就对几种常见 ...