附加新单元格会破坏Excel文件

时间:2016-12-13 06:43:27

标签: c# excel openxml

这可能是重复的,因为很多帖子引用了这类问题,但我无法找到这个案例的确切答案。

所以,我所拥有的是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文件中追加单元格,以免破坏文件?

2 个答案:

答案 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);
}