如何读取/写入/修改大型Excel XLSB / XLSM文件? (C#)

我有一个500MB的Excel(.xlsb / .xlsm)文件。 我需要一种方法来使用C#读取/写入/修改大型(.xlsb / .xlsm)文件,而无需将整个文件加载到内存中,而是一次加载块或至less加载一张表。

Excel文件基本上是包含XML文件的zip文件。 如果你用任何压缩工具打开一个excel文件,你会看到excel文档的内容。 你需要修改的是:

  • xl / sharedStrings.xml – excel通过在这个文件中build立索引来优化string用法(不是直观的,但是你可以迭代它们到最后并计数 – 第一个索引为0,第二个索引为1,依此类推。 ..)。 使用这些索引来更改/添加工作表文件中的string,不会损坏文档。

  • xl / workbook.xml – 包含工作表的名称。 例如,你可以发现在excel中sheet1被命名为“This Months'Income”。 如果你愿意的话,用它来按名称查找你的工作表。

  • xl / worksheets / *。xml – 这里是您的实际工作表。 要更改/添加string,请使用共享stringXML文件。 要更改/添加数字直接执行。 包含共享string值的单元格被标记为这样。

现在,您只需要逐行读取这些XML文件,并且不要将整个文件加载到内存中,就可以parsing/编辑这些XML文件,而且只需很less的内存就可以处理大量的数据。

在C#中,我使用ZipArchive临时提取只需要的文件,编辑它们,然后更新zip。 不要提取所有的东西,然后再压缩,因为你会损坏文件。 至less我不知道如何压缩它以这样的方式再次使它可用。