【问题标题】:Appending new cells breaks the excel file添加新单元格会破坏 excel 文件
【发布时间】:2016-12-13 06:43:26
【问题描述】:

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

所以,我有一个 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 文件中附加单元格,以免破坏文件?

【问题讨论】:

    标签: c# excel openxml


    【解决方案1】:

    所以 XML 格式错误并且损坏了 has 文件,因此出现错误:

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

    为了解决和解决这个问题,我建议您将手动创建的 xlsx 与以编程方式创建的 xlsx 进行比较。

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

    一旦你发现它的格式错误如何改变你的代码来尝试修复它。

    【讨论】:

    • 小提示:最好使用 OpenXML SDK 附带的“OpenXML SDK Productivity Tool”来比较文件。这使得比较更容易;)
    【解决方案2】:

    我使用 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);
    }
    

    【讨论】:

    • 不错的一个 - 我打算建议 ClosedXML 更容易使用 OpenXML 确实是最重要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 2014-09-10
    • 2019-10-26
    • 2015-02-08
    • 2017-09-20
    • 1970-01-01
    相关资源
    最近更新 更多