追加新单元打破了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); }