複雑なオブジェクト(ツリー構造)をデータシートに展開してExcelシートに表示します。 Datatableは巨大で、約20000行と10000列を持っています。vsto excel workbook project:大量のデータテーブルをExcelシートに書き込む方法
データをExcelセルに1つずつ書き込むことは、永遠に必要でした。ですから、私は複雑なオブジェクトをデータテーブルに変換し、それを以下のコードを使ってExcelシートに書き出しています。
エクセルシートに20K行×10K列のデータを1分未満でかなり速く書き込むことができますか?< 5分ですか?このタスクをすばやく完了するための最善の方法は何ですか。
環境:Visual Studioの2010年、VSTO Excelワークブックプロジェクト、.NET Frameworkの4.0、エクセル2010/2007
EDIT:データの
オリジナルソースは、JSON形式で残りのサービス応答です。私はその後、C#オブジェクトにjsonレスポンスをデシリアライズし、最終的にデータテーブルにフラット化します。 Excelシートにデータテーブルの書き込みにこのコードを使用
:
Excel.Range oRange;
var oSheet = Globals.Sheet3;
int rowCount = 1;
foreach (DataRow dr in resultsDataTable.Rows)
{
rowCount += 1;
for (int i = 1; i < resultsDataTable.Columns.Count + 1; i++)
{
// Add the header the first time through
if (rowCount == 2)
{
oSheet.Cells[1, i] = resultsDataTable.Columns[i - 1].ColumnName;
}
oSheet.Cells[rowCount, i] = dr[i - 1].ToString();
}
}
// Resize the columns
oRange = oSheet.get_Range(oSheet.Cells[1, 1],
oSheet.Cells[rowCount, resultsDataTable.Columns.Count]);
oRange.EntireColumn.AutoFit();
最終解決: は、データテーブルの代わりに、2Dオブジェクトの配列を使用し、範囲にそれを書きました。
resultsdataTableを.txtファイルに書き出してからインポートする方が簡単でしょうか?また、resultsDataTableがExcelでもリンク/インポートが可能なデータソースからのものである場合は、そのダイレクトモードを使用します。それは、セルごとの管理/ COMのシリアル化を排除します – rene