6

OLEDB (自動化なし) を使用して Excel ファイルに書き込もうとしています。他のアプリケーションから取得した約 500 行のデータがあり、'INSERT INTO..' クエリを使用して 1 つずつ Excel ファイルに書き込みます。他のアプリケーションからのデータの読み取りに遅延はないと確信しています。私はそれをチェックしました。約 3 分で 500 行の Excel ファイルに書き込むのにかかった合計時間。これは、やりすぎ。これは間違いなくファイル書き込み操作によるものです。

これを速くするための最良の方法は何でしょうか? 書くために他のテクニックを使用する必要がありますか?自動化のテクニックを試す必要がありますか?

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

4

12 に答える 12

7

Excel に COM できる場合は、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 に挿入する例です。

于 2009-05-15T22:47:56.717 に答える
3

Excel には、XML でデータを読み書きするために必要なものがすべて備わっています。

私はときどきSpreadsheetML形式を使用しましたが、うまくいきました。これを使用して、xml 形式のドキュメントを書き出し、拡張子 .xls を付けて名前を付けます。ほとんどの Excel 機能が利用可能です。Microsoft のリファレンス ドキュメントはこちらです。RailsPHPなどのさまざまな言語のチュートリアルについては、Google を参照してください。本Excel Hacksもそれについて語っています。

于 2009-05-15T22:36:22.530 に答える
2

単なるデータの場合は、CSV ファイルのインポートが機能します。コードでファイルを作成し、自動化を使用して Excel にファイルをインポートさせます。

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

于 2009-05-15T22:37:24.587 に答える
2

SpreadsheetGearを使用します。

于 2009-05-18T12:13:27.427 に答える
1

FlexCelライブラリをお勧めしましたが、無料ではありません :(

ただし、Office Open XML 形式が必要な場合は、http://excelpackage.codeplex.com/を使用できます。

于 2009-05-15T22:35:57.510 に答える
1

Excel への 1 回限りのダンプをお探しですか、それとも接続を維持してデータを Excel に複数回プッシュする必要がありますか?

データをExcelに複数回プッシュしたい場合は、RTDサーバーの作成を検討する必要があります。私はそれらを何度も使用しており、RTDサーバーで動作します

Excel への 1 回限りのプッシュを探している場合は、COM を使用する必要があります。COM と C# の使用

C# バージョン 4 ではマネージ COM が改善され、Excel を操作する際にプライマリ相互運用機能アセンブリが不要になります。C# 4 はまだ製品化されていませんが、動作する場合はベータ版をダウンロードできます。

于 2009-05-15T23:18:13.447 に答える
0

asposeセルを使用します。使い方はとても簡単で、高速で、明らかな問題はありません。

http://www.aspose.com/categories/.net-components/aspose.cells-for-.net/default.aspx

于 2009-10-19T13:22:59.547 に答える
0

手っ取り早い方法は、表形式のデータを含むHTMLテーブルを作成し、それを.xls拡張子で保存することです。それは動作し、Excelで正常に開きます。

于 2009-11-04T14:13:04.500 に答える
0

このライブラリは無料で、xlsファイルを非常に高速に作成できます。また、MSOfficeがインストールされていない場合にも機能します。 http://code.google.com/p/excellibrary/downloads/list

于 2009-05-16T05:31:38.010 に答える
0

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

DataSet を Excel ファイルにエクスポートする CodeProject の例は他にもあります。念頭に置いているのは、Excel XML 形式に従う XML ファイルを作成することです。また、セルごとに書き込みます。見る:

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

于 2009-05-15T22:34:53.220 に答える
0

Excel に「書き込む」もう 1 つの方法は、データを HTML ページとして作成し、それを読み込むことです。Excelは実際にhtmlを読み取ることができます。これを HTML 経由で行うことのボーナス ポイントは、CSV よりもデータの書式を少し良くできることです。

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

于 2009-05-15T22:46:35.080 に答える
0

私はAspose.Cellsライブラリを使用して、Excel ファイルの書き込みに成功しています。とはいえ、決して安くはありません。

于 2009-05-15T22:50:28.753 に答える