C#を使用すると、リストのリスト(つまりList<List<T>>
)をExcel 2003に直接エクスポートできますか?C#リストをExcelにエクスポート
大きなテキストファイルを解析してExcelにエクスポートしています。一度に1つのセルを書き込むと、オーバーヘッドが大きくなりすぎます。私はList<T>
を使用して、行や列の数を指定することを心配する必要がないようにしました。
現在、私はファイルの終わりまで待ってから、List<List<object>>
の内容を2次元配列に入れます。次に、配列をExcel.Rangeオブジェクトの値として設定できます。それは動作しますが、行や列の数を気にせずにList of Listsを取り、A1からどこにでもワークシートにダンプするだけで済むようです。
ここで私は交換または上改善したいコードの抜粋です:これは動作します
object oOpt = System.Reflection.Missing.Value; //for optional arguments
Excel.Application oXL = new Excel.Application();
Excel.Workbooks oWBs = oXL.Workbooks;
Excel._Workbook oWB = oWBs.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel._Worksheet oSheet = (Excel._Worksheet)oWB.ActiveSheet;
int numberOfRows = outputRows.Count;
int numberOfColumns = int.MinValue;
//outputRows is a List<List<object>>
foreach (List<object> outputColumns in outputRows)
{
if (numberOfColumns < outputColumns.Count)
{ numberOfColumns = outputColumns.Count; }
}
Excel.Range oRng = oSheet.get_Range("A1", oSheet.Cells[numberOfRows,numberOfColumns]);
object[,] outputArray = new object[numberOfRows,numberOfColumns];
for (int row = 0; row < numberOfRows; row++)
{
for (int col = 0; col < outputRows[row].Count; col++)
{
outputArray[row, col] = outputRows[row][col];
}
}
oRng.set_Value(oOpt, outputArray);
oXL.Visible = true;
oXL.UserControl = true;
が、私はむしろ、アレイを作成するの中間ステップを持つよりも、Excelに直接リストを使用したいですちょうどExcelのために。何か案は?
ありがとう!私たちは.NET 3.0ではありませんが、皆さんの説明を参考にしていただきたいと思います。 – reverendlarry
問題ありません。うれしいことです。 :-)項目#1だけが.NET 3.0と関連していましたが、それ以外はすべての.NET Frameworkに適用されます。 LINQは3.0への移行を検討する主な理由です。それはすべてのコードに革命を起こすことはありませんが、LINQは非常に優れた機能です。 –
ありがとう!これは完全に、明確なupvoteを働いた!しかし、助けになるかもしれない小さな細部。私はこのコードに 'oXL.Quit; 'という文章を追加しなければならなかった。もしそうでなければプロセスは実行し続けていて、ある時点でエラーが出始めたからだ。 – Soph