如何向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
相关产品推荐
相关产品推荐

