You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EPPlus循环批量生成多个图表仅成功生成1个的问题如何解决

EPPlus循环生成多图表问题修复方案

核心问题分析

  • 图表名称重复:worksheet.Drawings.AddChart()的第一个参数是绘图对象的唯一标识,你循环中每次传入相同的zaklad值,后续创建的图表会直接覆盖已有同名图表,最终仅保留1个。
  • 位置参数逻辑异常:SetPosition方法参数规则为SetPosition(起始行号, 行偏移像素, 起始列号, 列偏移像素),你当前代码第三个参数传入wiersz * x属于将行数值作为列号使用,大概率导致所有图表位置重叠,视觉上仅显示1个。
  • 缺失数据绑定逻辑:代码中仅定义了数据区域valueAddress,但未调用系列添加方法将数据绑定到图表,生成的图表无实际内容。

修正后参考代码

// 提前确认wiersz变量已正确赋值,示例中取初始行号为1
int wiersz = 1;
for (int x = 1; x < 5; x++)
{
    // 每个图表名称添加唯一后缀,避免重名覆盖
    var chart = worksheet.Drawings.AddChart($"{zaklad}_{x}", OfficeOpenXml.Drawing.Chart.eChartType.ColumnClustered);
    chart.Title.Text = "Total";
    // 调整位置逻辑:垂直排列,每个图表间隔10行避免重叠,可根据需求自行调整偏移规则
    chart.SetPosition(wiersz + (x - 1) * 10, 0, 14, 0);
    chart.SetSize(600, 300);
    // 原有单元格填充逻辑保留
    worksheet.Cells[wiersz, 14, wiersz + 1, 25].Style.Fill.PatternType = ExcelFillStyle.Solid;
    ExcelAddress valueAddress = new ExcelAddress(wiersz, 14 , wiersz + 1, 25);
    // 新增数据绑定,若有分类轴可将第二个参数替换为分类区域地址
    chart.Series.Add(valueAddress, null);
    // 原有样式配置保留
    chart.Legend.Border.LineStyle = eLineStyle.Solid;
    chart.Legend.Border.Fill.Style = eFillStyle.SolidFill;
    chart.Legend.Border.Fill.Color = Color.DarkBlue;
}

内容的提问来源于stack exchange,提问作者zaspany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:12:02