2013-06-26 31 views
5

ai cũng có thể giúp tôi không?Danh sách <custom> tới Excel C#

Tôi có một cấu trúc

public struct Data 
    { 

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

sau đó một số mã để mang lại trong một dữ liệu vào một danh sách, creaitng danh sách mới vv

Tôi muốn sau đó vận chuyển này vượt trội mà tôi đã làm như thế này ,

 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; 
     } 

Công trình này, nhưng nó rất chậm. Tôi nhập hơn 12.000 hàng và cấu trúc của tôi có 85 phần tử (vì vậy mỗi hàng có 85 cột dữ liệu).

Có ai có thể giúp thực hiện việc này nhanh hơn không ??

Cảm ơn, Timujin

+0

Bạn đã cố gắng sử dụng OleDB hoặc báo cáo để viết nó vào tệp Excel? – NDraskovic

+1

Bạn có thể muốn xem xét OpenXml nếu bạn đang làm việc với Excel 2007 trở lên. – juharr

+0

đã thử không ... im a newb to C# – Timujin

Trả lời

6

Nếu như @juharr nêu bạn có thể sử dụng OpenXML, nhìn vào thư viện ClosedXML để tạo các tài liệu Excel, tìm thấy here.

Sử dụng ví dụ của bạn ở trên sau đó bạn có thể sử dụng đoạn mã sau:

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"); 

Nếu bạn cần một dòng tiêu đề, sau đó bạn sẽ chỉ phải thêm những bằng tay, sử dụng một cái gì đó giống như dưới đây (Sau đó, bạn sẽ bắt đầu chèn hàng của bạn trên từ Row 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]; 
} 

trên yêu cầu hiệu suất, điều này có vẻ là hơn performant hơn lặp qua mảng. Tôi đã thực hiện một số thử nghiệm cơ bản về phía tôi và chèn 20 000 hàng cho đối tượng mẫu có chứa 2 thuộc tính, mất tổng cộng 1 giây.

+0

Cảm ơn, bệnh có một cái nhìn vào nó ngay lập tức !!! :-) – Timujin

+0

Tôi không thể tin rằng bạn đã làm điều này trong một vài dòng mã !!!! cảm ơn một triệu ... ps .. làm thế nào để các bạn tìm hiểu công cụ này, ive đọc nhiều sách, không nhận được bất cứ nơi nào !!! – Timujin

+0

tôi có thể tạo excel với đối tượng List của mình, nhưng làm thế nào để tạo ra với header? – Velkumar

Các vấn đề liên quan