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

如何向DocumentFormat.OpenXml.Spreadsheet.Row插入空单元格?报错求助

问题解决:OpenXml插入空单元格导致Excel文件损坏

空单元格的正确DataType设置

当单元格为空时,不要指定DataType为CellValues.String——因为String类型的单元格要求必须有对应的有效CellValue内容,空值会违反OpenXml的Schema校验规则,导致Excel报错。你有两种稳妥的处理方式:

  • 完全不设置DataType属性,同时不添加CellValue(或设置为空),Excel会自动识别为空单元格
  • 显式将DataType设置为CellValues.Null,无需设置CellValue

修改后的代码示例

// 初始化新行
Row newRow = new Row();
foreach (string value in values)
{
    // 向行中添加单元格
    if (string.IsNullOrEmpty(value))
    {
        newRow.Append(new Cell()
        {
            // 方案1:不指定DataType,让Excel自动处理
            // 方案2:显式设置为Null类型(推荐,更符合OpenXml规范)
            DataType = new EnumValue<CellValues>(CellValues.Null)
        });
    }
    else
    {
        newRow.Append(new Cell()
        {
            DataType = new EnumValue<CellValues>(CellValues.String),
            CellValue = new CellValue(value)
        });
    }
}

sheetData.InsertAt(newRow, lineCnt++);

补充说明

如果需要空单元格保留字符串类型的空值(而非真正的空单元格),可以设置CellValue = new CellValue(string.Empty)并保留DataType为String,但这种方式偶尔仍会触发Excel的校验警告,更稳妥的还是采用上述两种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:34:57