2013-06-26 13 views
5

誰でも助けてくれますか?リスト<custom> ExcelにC#

私はなど、新しいリストをcreaitng、構造

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列のデータがあります)。

誰でも簡単にすることができますか?

おかげで、 Timujin

+0

OleDBまたはレポートを使用してExcelファイルに書き込もうとしましたか? – NDraskovic

+1

Excel 2007以降で作業している場合は、OpenXmlを調べることをお勧めします。 – juharr

+0

はどちらも試していませんでした...私は新しくCになりました# – Timujin

答えて

6

@juharrあなたはOpenXMLのを使用することができます述べたように、Excel文書を作成するためのClosedXMLライブラリを見れば、hereを発見しました。そして、以下のようなものを使用して、あなたはヘッダー行が必要な場合は、あなただけ手動でそれらを追加する必要があります

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秒かかりました。

+0

ありがとう、病気それをすぐに見て!!!!-) – Timujin

+0

私はあなたがコードのいくつかの行でこれをしたと信じて!おかげで100万人... ps ..あなたはどうやってこのものを学びますか、iveはどこにでもいらない多くの本を読んでいます!!! – Timujin

+0

ListオブジェクトでExcelを作成することはできますが、ヘッダを使ってどのように作成すればよいですか? – Velkumar

関連する問題