追加新单元打破了Excel文件

这可能是重复尽可能多的post引用这种问题,但我无法find这个案件的确切答案。

所以,我有一个Excel文件,其中单元格“E4”包含公式“= C4 + D4”。 所有其他单元格都是空的,这意味着我不能通过OpenXmlsearch或获取它们,只是因为它们不存在于Xml中。 所以为了填充单元格“C4”和“D4”,我必须创build它们(像这样:)

var cell = new Cell(){ CellReference = new StringValue("C4"), DataType = new EnumValue<CellValues>(CellValues.Number), CellValue = new CellValue("123") } 

对于单元格“D4”是相同的,然后将这些单元格追加到行中

 row.Append(cell); 

打开excel文件后,它显示错误“Excel在file.xlsx中发现不可读的内容。是否要恢复此工作簿的内容?如果您信任此工作簿的源,请单击”是“。

我检查,当Excel文件中没有公式的单元格被正确追加。

所以我的问题是,使用OpenXml如何追加包含公式的Excel文件中的单元格,以便不破坏文件?

所以这个XML格式不正确,损坏了这个文件,所以错误:

Excel在文件中发现不可读的内容

为了排除故障并解决这个问题,我build议您将手动创build的xlsx与编程创build的xlsx进行比较。

为此,您将两个文件扩展名从XLSX重命名为ZIP>将它们解压缩到不同的文件夹>使用WinDiff工具(或更好的“OpenXML SDK生产力工具”)来比较文件。

一旦你发现它的畸形改变你的代码来尝试修复它。

我用EPPLUS解决了我的问题

 using (ExcelPackage excelPackage = new ExcelPackage(fileStream)) { ExcelWorkbook excelWorkBook = excelPackage.Workbook; ExcelWorksheet excelWorksheet = excelWorkBook.Worksheets.First(); excelWorksheet.Cells["C4"].Value = "123"; excelWorksheet.Cells["D4"].Value = "321"; excelPackage.SaveAs(memoryStream); }