C# Excel Interop生成图表列数超16时显示错误问题求助
问题根因
代码的核心问题是调用ChartWizard时没有显式指定PlotBy(系列绘制方向)参数,Excel会根据选中数据源的行列数自动判断绘制方向:
- 当列数小于16时,数据源行数(16行)大于列数,Excel默认按列生成系列,符合预期
- 当列数大于16时,数据源列数大于行数,Excel自动切换为按行生成系列,完全不符合数据组织逻辑,导致图表显示异常
另外你只手动设置了第一个系列的X轴数值,其余系列的X轴值未统一配置,也会导致部分曲线显示异常。
修复方案
修改两处代码即可:
- 调用
ChartWizard时显式指定按列生成系列 - 遍历所有系列统一设置X轴数值
修改后的代码片段
// 前面原有代码保持不变 xlRange2 = xlWorksheet2.Range[xlWorksheet2.Cells[1, 2], xlWorksheet2.Cells[16, colCount2]]; //此处为Y轴数值和系列名称 Excel.Chart ct2 = xlWorksheet2.Shapes.AddChart(null, 1, 275, 650, 350).Chart; var missing = System.Type.Missing; // 第四个参数显式指定按列生成系列,避免Excel自动判断出错 ct2.ChartWizard(xlRange2, Excel.XlChartType.xlLineMarkers, missing, Excel.XlRowCol.xlColumns, missing, missing, missing, missing, "Frequency[Hz]", "Absorption Coefficient[-]", missing); // 遍历所有系列统一设置X轴数值,不要仅设置第一个系列 foreach (Excel.Series oSeries2 in ct2.SeriesCollection()) { oSeries2.XValues = xlWorksheet2.get_Range("A2", "A16"); //此处为X轴数值 }
内容的提问来源于stack exchange,提问作者Gürkan Özdem
相关产品推荐
相关产品推荐

