2013-06-26 70 views
5

任何人都可以幫助我嗎?列表<custom> Excel Excel#

我有一個結構

public struct Data 
    { 

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

然後一些代碼帶來的數據到一個列表,creaitng新的列表等

我想當時的交通這個擅長這是我喜歡這個工作,

 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,看看ClosedXML庫創建Excel文檔,發現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

我不相信你在幾行代碼!!!!感謝一百萬... PS ..你們如何學習這些東西,我讀了很多書,沒有到達任何地方! – Timujin

+0

我可以用我的List對象創建excel,但是如何用header創建? – Velkumar