2017-12-05 6 views
-1

私は大きなExcelファイル(約40メガバイト)のセルを書き込むプログラムを持っています。C#を使って大きなExcelファイルに書き込む方法は?今非常に遅い

私は、セルを書くだけの動きでさえ、非常に遅いことがわかりました。 これは私のプロジェクトでやっていることです。私はこのようなセルを書くつもりですとき

Excel.Workbook apoWorkBook = _Excel.Workbooks.Open(apo); 
Excel.Worksheet apoWorkSheet = apoWorkBook.Worksheets[1]; 
Excel.Range apoRange = apoWorkSheet.UsedRange; 

は次に:

apoRange.Cells[target_row, 23].Value2 = "Value"; // (Repeats in different rows and columns) 

これは、ソースコードの行を終えるのに約20秒以上を費やしています。

しかし、私はこのように書くために多くの同じコードを持っています。これはそれを完了するために多くの時間を費やすだろう。

小さな空のExcelファイルに書き込むための実験を行いましたが、これを行うには約0.秒しか使用しませんでした。

いつもセルに書き込んだ後にファイルを保存するようなので、大きなエクセルファイルに書き込むのが非常に遅いと思います。

BIG Excelファイルに書き込む最も速い方法は何ですか?セルにすべての値を入れてすぐに一度に保存するようなことができますか?

助けてください、ありがとう!その差は非常になります疑う

+2

関連https://stackoverflow.com/a/536699/5265292 – grek40

+2

オプションで、Excel Interopを使用しないでください。いくつかのヒントがここにありますhttps://stackoverflow.com/a/2603625/5265292 – grek40

+0

@ grek40の最初のコメントにしたがって、Excel.Rangeに値の配列を書くことができますが、これは気にする必要があります上記の例では、arr [target_row-1,22]に値を代入する必要がありますが、C#配列は0オフセットですが、Excel.RangeはC#配列でアクセスされますが実際は1オフセットです。範囲に書き込む前に – PaulF

答えて

3

あなたが役立つかもしれ自動recalcuation

set Application.Calculation = xlCalculationManual 

をオフにしてくださいすることができますが、相互運用が遅いです。

あなたはcsvファイルを作成し、最後にそのファイルを開くことを検討しましたか?

csvを作成してから、interopを使用して後でフォーマットを行うこともできます。

+1

うわー、これは素晴らしいです。それは20秒から0.02秒までの時間を短縮する! – Jarkid

+0

@ Jarkidファイルを閉じる前にすべてを一度再計算することを忘れないでください。 – grek40

+0

@ grek40ファイルを閉じる前に再読しないとどうなりますか? – Jarkid

関連する問題