4

C#を使用して、リストのリスト(つまりList<List<T>>)をExcel 2003にエクスポートする直接的な方法はありますか?

大きなテキストファイルを解析してExcelにエクスポートしています。一度に1つのセルを書き込むと、オーバーヘッドが大きくなりすぎます。List<T>行や列の数を指定する必要がないように、を使用することにしました。

現在、ファイルの終わりまで待ってから、内容をList<List<object>>2次元配列に入れています。次に、配列をExcel.Rangeオブジェクトの値として設定できます。動作しますが、行や列の数を気にせずにリストのリストを取得して、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に使用したいと思います。何か案は?

4

4 に答える 4

1

セルを 1 つずつ更新するよりも、2 次元配列を Excel に渡す方がはるかに高速です

リストのリストの値を使用してオブジェクトの 2 次元配列を作成し、Excel の範囲を配列の次元に再次元化してから、range.set_Value を呼び出して、2 次元配列を渡します。

于 2009-06-29T19:17:31.967 に答える
0
List<"classname"> getreport = cs.getcompletionreport();

var getreported = getreport .Select(c => new { demographic = c.rName);

これが役立つことを願っています

cs.getcompletionreport()参照クラス ファイルはアプリのビジネス レイヤーです。

于 2012-11-05T09:10:44.810 に答える