这可能是重复的,因为很多帖子引用了这类问题,但我无法找到这个案例的确切答案。
所以,我所拥有的是Excel文件,其中单元格“E4”包含公式“= C4 + D4”。所有其他单元格都是空的,这意味着我无法通过OpenXml搜索或获取它们,只是因为它们不存在于Xml中。因此,为了填充单元格“C4”和“D4”,我必须创建它们(如下所示:)
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文件中追加单元格,以免破坏文件?
答案 0 :(得分:1)
因此XML格式错误并损坏了has文件,因此出现错误:
Excel在文件中找到了不可读的内容
要解决此问题,我建议您将手动创建的xlsx与以编程方式创建的xlsx进行比较。
要执行此操作,请将两个文件扩展名从XLSX重命名为ZIP&gt;将它们提取到不同的文件夹&gt;使用WinDiff工具(或更好的“OpenXML SDK Productivity Tool”)来比较文件。
一旦您发现其格式错误如何更改您的代码以尝试修复它。
答案 1 :(得分:0)
我使用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);
}