2009-05-15 5 views
4

私はOLEDB(オートメーションなし)を使用してExcelファイルに書き込もうとしています。 私はいくつかの他のアプリケーションから取得し、次に 'INSERT INTO ..'クエリを使用してExcelファイルに1つずつ書き込む500行程度のデータを持っています。 他のアプリケーションからのデータの読み込みに遅延がないことを確信しています。私はそれを確認した。 約3分で500行分のExcelファイルへの書き込みに要した合計時間。 これは多すぎます。これは間違いなくファイル書き込み操作のためです。C#を使用してExcelファイルに書き込むための最善の方法と最速の方法は何ですか?

これを速くするにはどうすればよいでしょうか? 私は他のテクニックを書くべきでしょうか? オートメーションで技術を試すべきですか?

http://support.microsoft.com/kb/306023 このリンクは多くの手法を示していますが、どちらを使用するかはわかりません。

答えて

0

よく、Excelを書くための最も基本的な(しかし最も複雑な)方法は、BIFF形式に従ってバイナリファイルを作成することです。 BIFF形式では、Excelファイルの構造を概説する必要があります。非常に複雑ですが、セルごとに何を書き込むかを制御しています。

DataSetをExcelファイルにエクスポートする際のCodeProjectの他の例があります。 1つは、Excel XML形式に従うXMLファイルを作成することです。また、セル単位で書き込みます。見てください:

http://www.codeproject.com/KB/office/ExportDataSetToExcel.aspx

3

Excelがすでにすべてが付属して使用することができますXMLでデータを読み書きする必要があります

私は機会にSpreadsheetMLフォーマットを使用しました。よく私のために。それを使用して、XML形式のドキュメントを書き出し、.xls拡張子を付けて名前を付けます。ほとんどのExcel機能が利用できます。マイクロソフトのリファレンスドキュメントはhereです。 Googleは、RailsPHPなどのさまざまな言語のチュートリアルを提供しています。それについての本Excel Hacksも話しています。

2

データだけの場合は、CSVファイルのインポートが機能します。ファイルをコードに作成し、オートメーションを使用してExcelにファイルをインポートさせます。

更新:これを書いた後、私は知らなかった@MicTech's suggestionが好きです。

+0

私は多くのスプレッドシートを持つ.xlsファイルを持っています。私はシートの1つに書き込む必要があります。オートメーションを使用してcsvファイルをインポートし、必要なスプレッドシートにデータをコピーする方法を教えてください。 –

+0

codeproject.comなどの例があります。そして、これは助けてください:http://msdn.microsoft.com/en-us/library/wss56bz7(VS.80).aspx – kenny

+0

これは迅速ですが、時々csvを開くためにExcelでText Importを使用するのが最善ですが、エクセルは科学的な数字としてテキスト項目の書式を設定するので、あなたは制御が制限された自動エクセルの動作の1つの例にすぎません。 –

0

Excelに書き込むもう1つの方法は、データをHTMLページとして作成して読み込むことです。 Excelは実際にhtmlを読むことができます。 htmlでこれを行う場合のボーナスポイントは、CSVでできるよりも少しデータをフォーマットできることです。

しかし、単純なデータ(小さなテキストフィールドと数字)のみをエクスポートする場合は、CSVを使用してください。

7

COMにexcelできるのであれば、COM経由でexcelから直接問い合わせるか、データの配列を作成して配列のサイズに等しい範囲に直接ドロップしてください。Excelが小さなCOM呼び出しのための素晴らしいではないですが、それはいくつかの大きなCOM呼び出しではなく、うまく機能:)

DataSet ds = new DataSet(); 
      da.Fill(ds); 
      int width = ds.Tables[0].Columns.Count; 
      int height = ds.Tables[0].Rows.Count; 
      object[,] retList = new object[height, width]; 
      for (int i = 0; i < height; i++) 
      { 
      DataRow r = ds.Tables[0].Rows[i]; 
      for (int j = 0; j < width; j++) 
       retList[i, j] = r.ItemArray[j]; 
      } 
      Excel.Range range = mWs.get_Range(destination, mWs.Cells[destination.Row + height - 1, destination.Column + width - 1]); 
      range.set_Value(Missing.Value, retList); 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(range); 
      range = null; 

これは、データを取得し、1つのCOM呼び出し

でExcelに配列としてそれを挿入する例です
0

私はAspose.Cellsライブラリを使用してExcelファイルを書きました。しかし、これは安いものではありません。

1

Excelへのダンプダンプを探しているのですか、接続してデータを1回以上Excelにプッシュしますか?

あなたは、RTDサーバーを作成する調査する必要がありますより多くのあなた回Excelにデータをプッシュするために探している場合、私は彼らに何回も使用してきましたし、あなたはあなたが必要なExcelに一回プッシュを探しているならば、彼らは

RTD Serverを働きますCOMを使用する。 Using COM and C#

C#バージョン4では、管理対象COMにいくつかの改善点があり、Excelで作業するときにプライマリ相互運用機能アセンブリが不要になります。 C#4はまだ生産中ではありませんが、あなたのために動作すれば、そのベータ版をダウンロードできます。

+0

RTDサーバーは非常に面白いです。 – Knox

0

迅速かつ汚い方法は、あなたの表形式のデータを含むHTMLテーブルを作成し、.xls拡張子でそれを保存することです。それは動作し、Excelで正常に開きます。

関連する問題