私は500MBのExcel(.xlsb/.xlsm)ファイルを持っています。私は、ファイル全体をメモリにロードせずに、C#を使用して大容量の(.xlsb/.xlsm)ファイルを読み書きする方法が必要ですが、代わりにチャンクにロードするか、一度に1枚ずつ読み込んでください。大規模なExcel XLSB/XLSMファイルの読み取り/書き込み/変更方法(C#)
答えて
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を使用します。ファイルを破損するため、すべてを解凍してから再度解凍しないでください。少なくとも私はどのようにそれを圧縮するかわからない。それを再び使用可能にするような方法で。
- 1. EXCEL VBA読み取り/書き込み。 dftファイル(IBM Data Tranfer)
- 2. C#ファイルを読み取り専用で読み取り/書き込みする
- 3. C++ファイル - 書き込み、読み取り、配列。
- 4. 大規模なJSONファイルをSpark Dataframeに読み込む
- 5. C#CSLAビジネスオブジェクトのジレンマ:読み取り専用vs読み込み/書き込み
- 6. C#読み込み/書き込み.xlsmファイル
- 7. 読み取り/書き込みのQObject
- 8. プリファレンスの読み取り/書き込み
- 9. 大きなJSONObjectのファイルへの書き込み/読み込みAndroid
- 10. アセンブリでのハードウェアへの書き込み/読み取り方法
- 11. C#Windowsアプリで大きなファイルを読み込む方法
- 12. C#Excelファイルへの書き込み
- 13. Swiftのplistの書き込み/読み取り方法3
- 14. 大きなファイルの書き込みと読み込み用に開く
- 15. C#:SerialPort:読み取りと書き込みのバッファサイズ
- 16. VBAを使用してExcelファイルの現在の読み取り/書き込みユーザーを取得する方法
- 17. 読み取り/書き込みSPIデバイス
- 18. 読み取り/書き込み同期
- 19. DBからの読み取りとファイルへの書き込み
- 20. MMIO読み取り/書き込みレイテンシ
- 21. ファイルへのC++の読み込みと書き込み
- 22. Postgres書き込み/読み取りロック
- 23. Delphi:ファイルへの変数の書き込み/読み込み
- 24. 読み取り/書き込みTCPオプションフィールド
- 25. 大規模なデータベースをUITableViewに読み込む際のベストプラクティス
- 26. Visual C++/CLIでファイルに書き込み、ファイルから読み込む方法は?
- 27. ファイル読み込みと書き込み
- 28. ファイルへの読み書きの高速読み込みと書き込み
- 29. マルチスレッドロックの読み取り/書き込みのテキストC#
- 30. ファイルのプロパティを変更したり変更する(読み取り専用から書き込み可能)
OpenXmlSDKはあなたの友人です:https://msdn.microsoft.com/en-us/library/office/bb448854.aspx – zaitsman
私はすでに試してみましたが、xls(x)で動作しましたが、xlsmで例外がスローされます私が何か間違っていない限り、何らかの理由で。 –