C# 在 Excel 中创建混合型图表(柱状图+折线图)及双轴操作
在进行复杂数据分析时,单一图表类型往往难以同时清晰呈现数量级差异较大的多组数据。通过使用 C# 调用 Free Spire.XLS 库,可以在 Excel 单元格内构建混合图表,将部分系列设为柱状图、另一部分设为折线图,并引入次级坐标轴以解决刻度不匹配问题,从而提升数据展示的直观性与专业度。
混合图表的应用场景与准备
在实际业务报告中,常需在同一视图下对比“销售额”(数值较大)与“增长率”(百分比数值较小)。若仅使用主坐标轴,增长率的变化趋势会被压缩至底部难以辨认。混合图表通过在图表中添加第二个分类轴或值轴,允许不同数据系列独立映射到各自的坐标系,是解决此类问题的标准方案。
本示例基于 Free Spire.XLS 组件进行开发。请确保项目中已引用该 DLL 文件,否则后续代码中的 Workbook、Chart 等对象无法识别。以下是核心操作流程,从加载文件到生成带双轴的混合图形:
实现步骤详解
第1步:初始化 Workbook 并加载源数据
首先实例化 Workbook 类,并指定待处理的 Excel 文件路径。该文件应包含用于绘图的原始数据表,如标题行及对应的数值列。
Workbook workbook = new Workbook();
// 替换为你的实际文件路径
workbook.LoadFromFile(@"E:\Visual Studio\Sample\Book1.xlsx");
第2步:锁定目标工作表
获取工作薄中的第一个工作表对象,后续的图表插入将默认基于此 Sheet 进行。
Worksheet sheet = workbook.Worksheets[0];
第3步:定义图表数据源范围
在工作表的 Charts 集合中添加新图表。关键在于设置 DataRange 为包含所有系列的数据区域(例如 A1 至 D5),并将 SeriesDataFromRange 设为 false。这一步告诉引擎我们将从后面的代码中手动指定每个系列的类型和来源,而不是依赖 Excel 默认的自动推断逻辑。
Chart chart = sheet.Charts.Add();
chart.DataRange = sheet.Range["A1:D5"];
chart.SeriesDataFromRange = false;
第4步:设定图表在表格中的位置
为了避免遮挡原有数据,通常将图表放置于数据右侧的空白区域。通过设置左、右、上、下行号来确定图表占据的网格单元。
chart.LeftColumn = 6;
chart.TopRow = 1;
chart.RightColumn = 12;
chart.BottomRow = 13;
第5步:分别为系列分配图表类型
这是形成“混合”效果的核心。遍历图表中的 Series 集合,将前两个系列设置为簇状柱形图(ColumnClustered),将第三个系列设置为带标记的折线图(LineMarkers)。
var cs1 = (ChartSerie)chart.Series[0];
cs1.SerieType = ExcelChartType.ColumnClustered;
var cs2 = (ChartSerie)chart.Series[1];
cs2.SerieType = ExcelChartType.ColumnClustered;
var cs3 = (ChartSerie)chart.Series[2];
cs3.SerieType = ExcelChartType.LineMarkers;
第6步:启用次级坐标轴以适配量纲
由于折线图代表的系列可能与柱状图的数值跨度不同,需要将其关联到次级轴。启用 SecondaryCategoryAxis.IsMaxCross 可激活次级坐标轴的显示,并将该特定系列(Series 2/索引2)的 UsePrimaryAxis 设为 false,使其脱离主轴约束。
chart.SecondaryCategoryAxis.IsMaxCross = true;
cs3.UsePrimaryAxis = false;
第7步:保存成果并预览
将修改后的文档保存为新文件,并使用系统默认程序打开以验证效果。
workbook.SaveToFile("result.xlsx");
System.Diagnostics.Process.Start("result.xlsx");
效果验证与代码汇总
执行上述代码后,生成的 Excel 文件将在指定区域渲染出混合图表。其中柱状图高度反映绝对数值,而折线图走势则依据右侧或独立的刻度尺变化,两者互不干扰且同屏呈现。
初始数据样本示意:

最终生成的混合图表效果图:

为方便集成,以下为完整代码片段:
Workbook workbook = new Workbook();
workbook.LoadFromFile(@"E:\Visual Studio\Sample\Book1.xlsx");
Worksheet sheet = workbook.Worksheets[0];
//工作表中添加图表并将其数据设置为图表的数据源
Chart chart = sheet.Charts.Add();
chart.DataRange = sheet.Range["A1:D5"];
chart.SeriesDataFromRange = false;
//设置图表位置
chart.LeftColumn = 6;
chart.TopRow = 1;
chart.RightColumn = 12;
chart.BottomRow = 13;
//根据系列运用不同的图表类型
var cs1 = (ChartSerie)chart.Series[0];
cs1.SerieType = ExcelChartType.ColumnClustered;
var cs2 = (ChartSerie)chart.Series[1];
cs2.SerieType = ExcelChartType.ColumnClustered;
var cs3 = (ChartSerie)chart.Series[2];
cs3.SerieType = ExcelChartType.LineMarkers;
//再添加一个轴
chart.SecondaryCategoryAxis.IsMaxCross = true;
cs3.UsePrimaryAxis = false;
//保存并运行文件
workbook.SaveToFile("result.xlsx");
System.Diagnostics.Process.Start("result.xlsx");
以上就是在 C# Excel 工作表创建混合型图表及添加第二坐标轴的详细内容,更多关于 .NET 数据报表自动化处理的技术资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









