首页
/ 使用NPOI为Excel柱状图设置自定义列颜色

使用NPOI为Excel柱状图设置自定义列颜色

2025-06-05 22:34:49作者:廉彬冶Miranda

概述

在Excel报表开发中,柱状图是常用的数据可视化方式之一。NPOI作为.NET平台下操作Office文档的强大库,提供了创建和修改Excel图表的功能。本文将详细介绍如何使用NPOI为Excel柱状图的每一列设置不同的自定义颜色。

实现原理

NPOI通过操作OpenXML格式的底层结构来实现对Excel图表的控制。要为柱状图的每一列设置不同颜色,我们需要:

  1. 创建基本的柱状图
  2. 获取图表的数据点(Data Point)集合
  3. 为每个数据点单独设置填充颜色

具体实现步骤

1. 创建基础柱状图

首先需要创建基本的柱状图结构,包括:

  • 图表数据源
  • 坐标轴
  • 图例
  • 基本样式设置
// 创建图表
XSSFChart chart = (XSSFChart)drawing.CreateChart(anchor);

// 创建柱状图数据
IColumnChartData<string, double> columnChartData = chart.ChartDataFactory.CreateColumnChartData<string, double>();

// 设置图例
IChartLegend legend = chart.GetOrCreateLegend();
legend.Position = LegendPosition.Bottom;

// 设置坐标轴
IChartAxis bottomAxis = chart.ChartAxisFactory.CreateCategoryAxis(AxisPosition.Bottom);
bottomAxis.MajorTickMark = AxisTickMark.None;
IValueAxis leftAxis = chart.ChartAxisFactory.CreateValueAxis(AxisPosition.Left);
leftAxis.Crosses = AxisCrosses.AutoZero;
leftAxis.SetCrossBetween(AxisCrossBetween.Between);

// 添加数据系列
IChartDataSource<string> categoryAxis = DataSources.FromStringCellRange(sheet, new CellRangeAddress(startDataRow, endDataRow, 0, 0));
IChartDataSource<double> valueAxis = DataSources.FromNumericCellRange(sheet, new CellRangeAddress(startDataRow, endDataRow, columnIndex, columnIndex));
var serie = columnChartData.AddSeries(categoryAxis, valueAxis);
serie.SetTitle("Categories of Risk Associated");

// 绘制图表
chart.Plot(columnChartData, bottomAxis, leftAxis);

2. 设置自定义列颜色

在基础图表创建完成后,我们可以为每个数据点设置不同的颜色:

// 定义颜色数组(RGB格式)
byte[][] colors = new byte[][] {
    new byte[] {127, 255, 127},  // 浅绿色
    new byte[] {200, 200, 200},  // 灰色
    new byte[] {255, 255, 127},  // 浅黄色
    new byte[] {255, 127, 127},  // 浅红色
    new byte[] {255, 0, 0},      // 红色
    new byte[] {0, 255, 0},      // 绿色
    new byte[] {0, 0, 255},      // 蓝色
    new byte[] {80, 80, 80},     // 深灰色
    new byte[] {90, 80, 80},     // 红灰色
    new byte[] {100, 80, 80}     // 深红灰色
};

// 获取数据点数量
int pointCount = serie.GetCategoryAxisData().PointCount;

// 获取图表绘图区域
var plotArea = chart.GetCTChart().plotArea;

// 初始化数据点集合
plotArea.barChart[0].ser[0].dPt = new System.Collections.Generic.List<NPOI.OpenXmlFormats.Dml.Chart.CT_DPt>();

// 为每个数据点设置颜色
for (int i = 0; i < pointCount; i++)
{
    plotArea.barChart[0].ser[0].dPt.Add(new NPOI.OpenXmlFormats.Dml.Chart.CT_DPt());
    plotArea.barChart[0].ser[0].dPt[i].idx = new NPOI.OpenXmlFormats.Dml.Chart.CT_UnsignedInt() { val = (uint)i};
    plotArea.barChart[0].ser[0].dPt[i].spPr = new NPOI.OpenXmlFormats.Dml.Chart.CT_ShapeProperties();
    plotArea.barChart[0].ser[0].dPt[i].spPr.AddNewSolidFill().AddNewSrgbClr().val = colors[i];
}

3. 使用主题颜色(可选)

如果需要使用Excel的主题颜色而非自定义RGB值,可以简单设置:

chart.GetCTChart().plotArea.barChart[0].varyColors = new NPOI.OpenXmlFormats.Dml.Chart.CT_Boolean() { val = 1 };

注意事项

  1. 颜色数组的大小应该至少等于数据点的数量,否则会抛出索引越界异常
  2. RGB颜色值的范围是0-255,使用byte类型存储
  3. 如果需要更多颜色变化,可以扩展颜色数组
  4. 此方法同样适用于其他类型的图表,如条形图、饼图等

总结

通过NPOI提供的底层OpenXML操作接口,我们可以灵活地控制Excel图表的各种样式属性,包括为柱状图的每一列设置不同的颜色。这种方法不仅适用于简单的报表需求,也可以满足复杂的数据可视化场景。掌握这些技巧后,开发者可以创建出更加专业和美观的Excel报表。

登录后查看全文
热门项目推荐

热门内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
178
263
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
868
514
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
130
183
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
288
323
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
373
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
600
58
GitNextGitNext
基于可以运行在OpenHarmony的git,提供git客户端操作能力
ArkTS
10
3