相较于数据,图表更能直观的体现数据的变化趋势。在数据表格中,同一数据值,可能同时代表不同的数据分类,表现在图表中则是一个数据体现在多个数据分类标签下。通常生成的图表一般默认只有一种分类标签,下面的方法将通过编程的方式来介绍在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. python!!!!惊了,这世上居然还有这么神奇的东西存在

    第一次接触到python的时候实在看学习3Blue1Brown的视频线性代数的本质的时候.惊奇的是里面的视频操作,例如向量的变化,线性变换等都是由python用代码打出来的.那时的我只是以为pytho ...

  2. PHP 7 新特性

    PHP 7 新特性 标量类型声明 PHP 7 中的函数的形参类型声明可以是标量了.在 PHP 5 中只能是类名.接口.array 或者 callable (PHP 5.4,即可以是函数,包括匿名函数) ...

  3. debain 安装nodejs

    apt-get update -yapt-get install -y build-essential curl curl -sL https://deb.nodesource.com/setup_8 ...

  4. Myeclipse10.7.1 导出war包报错

    myeclipse10.7.1 导出war问题解决办法myeclipse10破解后,导出war包时报"SECURITY ALERT: INTEGERITY CHECK ERROR" ...

  5. Java 8 基础API的一些小的该进

    Java8是一个较大改变的版本,包含了API和库方面的修正,它还对我们常用的API进行很多微小的调整, 下面我会带你了解字符串.集合.注解等新方法. 字符串 经常会遇到这样一种情况, 需要将一组字符串 ...

  6. PHP之连接mysql小练习

    mysql Test.sql 1 -- phpMyAdmin SQL Dump -- version 4.6.6 -- https://www.phpmyadmin.net/ -- -- Host: ...

  7. 出现“Unable to resolve target 'android-XXX'”怎么处理?

    这句话的中文意思就是说安卓API版本没有能适配22的,需要将sdk更新一下,必要的话,adt都要跟着更新,但就我尝试来看,还是要先更新adt,然后您或许发现,这个表单好不容易刷出来,但是没有我们想要的 ...

  8. Linux时间子系统之(一):时间的基本概念

    专题文档汇总目录 Notes:Linux时间基准点:Linux时间和broken-down time(struct tm):不同精度的时间表示time_t.timeval.timespec. 原文地址 ...

  9. npm安装项目出错

    F:\ajax>npm install iview --savenpm WARN saveError ENOENT: no such file or directory, open 'F:\aj ...

  10. CentOS 6.2+Nginx+Nagios,手机短信和qq邮箱提醒

    http://chenhao6.blog.51cto.com/6228054/1323192 标签:软件包 配置文件 nagios 服务端 监控 原创作品,允许转载,转载时请务必以超链接形式标明文章  ...