10

誰でも私を助けることができますか?

私は構造を持っています

    public struct Data
    {

        public string aaaAAA;          
        public string bbbBBB;          
        public string cccCCC; 
        ...
        ...
     }

次に、データをリストに取り込み、新しいリストを作成するコードなど。

次に、これをこのように行ったExcelに転送したいのですが、

        for (int r = 0; r < newlist.Count; r++)
        {
            ws.Cells[row,1] = newlist[r].aaaAAA;
            ws.Cells[row,2] = newlist[r].bbbBBB;
            ws.Cells[row,3] = newlist[r].cccBBB;
        }

これは機能しますが、非常に遅いです。12,000 を超える行を入力しており、構造には 85 の要素があります (したがって、各行には 85 列のデータがあります)。

誰でもこれをより速くするのを助けることができますか??

ありがとう、ティムジン

4

1 に答える 1

19

@juharr が述べたように、OpenXML を使用できる場合は、ここにある Excel ドキュメントを作成するための ClosedXML ライブラリを参照してください。

上記の例を使用すると、次のコードを使用できます。

var wb = new XLWorkbook();
var ws = wb.Worksheets.Add("Data_Test_Worksheet");
ws.Cell(1, 1).InsertData(newList);
wb.SaveAs(@"c:\temp\Data_Test.xlsx");

ヘッダー行が必要な場合は、以下のようなものを使用して手動で追加する必要があります (次に、行 2 から上に行を挿入し始めます)。

PropertyInfo[] properties = newList.First().GetType().GetProperties();
List<string> headerNames = properties.Select(prop => prop.Name).ToList();
for (int i = 0; i < headerNames.Count; i++)
{
    ws.Cell(1, i + 1).Value = headerNames[i];
}

パフォーマンス要件では、これは配列を反復処理するよりもパフォーマンスが高いようです。私の側でいくつかの基本的なテストを行ったところ、2 つのプロパティを含むサンプル オブジェクトに 20,000 行を挿入するのに合計 1 秒かかりました。

于 2013-06-26T15:55:05.507 に答える