C# 使用Word Interop生成Word图表时如何通过代码连接空数据点
C# Word Interop 折线图空数据点连线实现方案
核心解决思路
问题由两个原因共同导致:
- 缺失的变量值对应Excel单元格未赋值,Office默认将空单元格识别为0值渲染
- 图表默认未开启空数据点插值连线配置
具体修改步骤
步骤1:修改单元格填充逻辑,缺失值标记为#N/A
原代码中变量在对应时间点无数据时未给单元格赋值,需要改为写入Excel可识别的缺失值标记#N/A,避免被识别为0:
将你原有填充单元格的代码段:
for(int j = 2; j < variables.Count + 2; j++) { if (visuData[moment].ContainsKey(variables[j - 2])) excelWorksheet.Cells[rowIndex, j].Value = visuData[moment][variables[j - 2]]; }
修改为:
for(int j = 2; j < variables.Count + 2; j++) { if (visuData[moment].ContainsKey(variables[j - 2])) { excelWorksheet.Cells[rowIndex, j].Value = visuData[moment][variables[j - 2]]; } else { // 写入Excel #N/A 标记,标识为无效空数据点 excelWorksheet.Cells[rowIndex, j].Value = Microsoft.Office.Interop.Excel.Constants.xlErrNA; } }
步骤2:配置图表空单元格显示规则为插值连线
在chart.Refresh()之前添加配置代码,设置图表空数据的处理方式为相邻点连线:
// 设置空单元格用连线连接有效数据点 chart.DisplayBlanksAs = Microsoft.Office.Interop.Word.XlDisplayBlanksAs.xlInterpolated; chart.ChartTitle.Text = "Batch ID " + checkBox.Text; chart.Refresh();
注意事项
- 不要给空数据点赋值为
null或空字符串,Office不会将其识别为缺失值,只有xlErrNA对应的#N/A才会被图表判定为无效点 - 该配置仅对折线图、面积图等支持连续渲染的图表类型生效,你当前使用的
xlLineMarkers折线带标记类型完全兼容
内容的提问来源于stack exchange,提问作者grafj73
相关产品推荐
相关产品推荐

