2016-07-09 323 views
2

我有一個500MB的excel(.xlsb/.xlsm)文件。我需要一種方法來使用C#讀取/寫入/修改大型(.xlsb/.xlsm)文件,而無需將整個文件加載到內存中,而是一次加載塊或至少加載一張表。如何讀取/寫入/修改大型Excel XLSB/XLSM文件? (C#)

+0

OpenXmlSDK是你的朋友:https://msdn.microsoft.com/en-us/library/office/bb448854.aspx – zaitsman

+0

我已經嘗試過它,它使用xls(x),但它在xlsm上引發異常出於某種原因,除非我做錯了什麼。 –

回答

0

Excel文件基本上是包含XML文件的zip文件。如果您使用任何zip工具打開excel文件,您將看到excel文檔的內容。您需要修改的有:

  • XL/sharedStrings.xml - 高強在該文件索引它們(不是在視覺上優化字符串使用,但是你也可以遍歷到最後和計數 - 第一一個索引爲0,第二個索引爲1,依此類推......)。使用這些索引來更改/添加工作表文件中的字符串以避免損壞文檔。

  • xl/workbook.xml - 包含工作表的名稱。例如,你可以發現sheet1在excel中被命名爲「本月收入」。如果您願意,可以使用它來按名稱查找您的工作表。

  • xl /工作表/ *。xml - 這裏是您的實際工作表。要更改/添加字符串,請使用共享字符串XML文件。要更改/添加數字,請直接進行。包含共享字符串值的單元格被標記爲這樣。

現在,你只需要解析/而讀他們一行一行地不加載在內存中的整個文件編輯這些XML文件,你將能夠處理大量的數據,用很少的內存佔用。

在C#中,我使用ZipArchive臨時提取只需要的文件,編輯它們,然後更新zip。不要提取所有內容,然後再壓縮它,因爲你會損壞文件。至少我不知道如何壓縮它以這種方式再次使它可用。