2016-03-28 10 views
-1

私は2 000 000以上の行をExcelにエクスポートしたいと考えています(将来的には大きくなるでしょう)。 1つのシートが1,048,576の行を処理する。私は各シートに300 000を載せたいと思います(Excelが適切に機能するように)。大量のデータをExcelにエクスポートできます。複数のシート。 Delphi

OLEオブジェクトを作成して、別のシートにデータを配置しようとしました。これは少数のデータに対しては機能しましたが、時間がかかりすぎて大量のデータでエラーが発生しました。 それから、私はExcelのエクスポートのコンポーネントを試してみましたが、時間がかかりましたが、この場合、シートにデータをどのように配布するのか分かりません。 シート上で配布するためにSQLを使用すると、メモリの充填エラーが発生します。

他の方法をお勧めしますか?

+0

どのエクスポートコンポーネントを試しましたか?コンポーネントベンダーにシート上でデータをどのように配布できるか尋ねましたか? Delphi用のネイティブExcelコンポーネントがあり、Excelファイルに直接データを書き込むことができます。 – sddk

+0

いいえ私はしませんでした。私は配列をしようと思います。返信ありがとう – 91Violet

答えて

3

コードは表示されませんが、一度に1つのセルしか書いていないことがわかります。代わりに、以下を実行する必要があります。

  1. すべてのデータをバリアント配列に配置します。
  2. ポピュレートするセルの範囲を含むExcel Rangeオブジェクトを作成します。
  3. バリアント配列をRangeオブジェクトに割り当てます。

これは、Excelオートメーションを使用してブロック割り当てを行う効率的な方法です。

さらに、Excelを自動化することは、おそらくExcelファイルを生成する最も効果的な方法ではありません。 Excelアプリケーションを起動しなくても、直接ファイルを生成する方がよいでしょう。非常に大きなファイルの場合、書き込みと読み込みの最も効率的なフォーマットは、拡張子が.xlsbのバイナリOpenXMLフォーマットです。そのようなファイルを生成するコンポーネントを見つけたり、独自のコードをOpenXMLフォーマット仕様に書き込んでください。

+0

デイヴィッド、助けてくれてありがとうありがとう。 – 91Violet

+1

非常に大きなExcelファイルを作成し、データをカンマ区切りのcsvファイルに保存し、そのファイルをExcelにロードすることは、ファイルをバリアント配列に直接ロードするよりも数倍高速です。 – lkessler

+0

@lkesslerバリアント配列の速度が遅くなります。しかし、私は全くそれをお勧めしません。 –

関連する問題