2016-07-09 3 views
2

私は500MBのExcel(.xlsb/.xlsm)ファイルを持っています。私は、ファイル全体をメモリにロードせずに、C#を使用して大容量の(.xlsb/.xlsm)ファイルを読み書きする方法が必要ですが、代わりにチャンクにロードするか、一度に1枚ずつ読み込んでください。大規模な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 - Excelはない視覚的に(このファイルでそれらのインデックスを作成することにより、文字列の使用を最適化していますが、最後にそれらを反復処理し、カウントすることができます - 最初に1つはインデックス0を持ち、2つ目はインデックス1を持ちます。これらのインデックスを使用して、シートファイル内の文字列を変更/追加して、ドキュメントを破損しないようにします。

  • xl/workbook.xml - シート名が含まれています。たとえば、Excelでsheet1の名前が「今月の収入」であることがわかります。それを使ってあなたのシートを名前で見つけることができます。

  • xl/worksheets/*。xml - 実際のシートです。文字列を変更/追加するには、共有文字列のXMLファイルを使用します。番号を変更/追加するには、直接行います。共有文字列値を含むセルには、そのようにマークされます。

は今、あなたはちょうど/パース線ごとにそれらを読んで、メモリ内のファイル全体をロードしていないながら、これらのXMLファイルを編集する必要があり、あなたは非常に少ないメモリフットプリントで大量のデータを処理することができるようになります。

私は必要なファイルのみを一時的に抽出し、編集してからzipを更新するためにZipArchiveを使用します。ファイルを破損するため、すべてを解凍してから再度解凍しないでください。少なくとも私はどのようにそれを圧縮するかわからない。それを再び使用可能にするような方法で。

関連する問題