2015-06-02 13 views
8

Vấn đề là tôi cần phải chèn dữ liệu vào Excel từ bộ sưu tập nhiều lần bằng cách sử dụng một mẫu duy nhất cho toàn bộ bộ sưu tập.Có thể sao chép hàng (có dữ liệu, hợp nhất, kiểu) trong Excel bằng Epplus không?

using (var pckg = new ExcelPackage(new FileInfo(association.TemplatePath))) 
{ 
    var workSheet = pckg.Workbook.Worksheets[1]; 
    var dataTable = WorksheetToDataTable(workSheet); 
    /*Some stuff*/ 
    FindAndReplaceValue(workSheet, dictionary, row); 
} 

private DataTable WorksheetToDataTable(ExcelWorksheet oSheet) 
{ 
    int totalRows = oSheet.Dimension.End.Row; 
    int totalCols = oSheet.Dimension.End.Column; 
    DataTable dt = new DataTable(oSheet.Name); 
    DataRow dr = null; 
    for (int i = 1; i <= totalRows; i++) 
    { 
     if (i > 1) dr = dt.Rows.Add(); 
     for (int j = 1; j <= totalCols; j++) 
     { 
      if (i == 1) 
       dt.Columns.Add((oSheet.Cells[i, j].Value ?? "").ToString()); 
      else 
       dr[j - 1] = (oSheet.Cells[i, j].Value ?? "").ToString(); 
     } 
    } 
    return dt; 
} 

Ảnh đầu tiên - Mẫu của tôi. Thứ hai - Yếu tố đầu tiên của bộ sưu tập (với dữ liệu, kiểu, hợp nhất). Thứ ba - Các yếu tố khác chỉ có dữ liệu

This is my template First element of collection has data, style, merging Other elements got nothing besides data

Trả lời

14

Tôi chỉ làm bản sao của hàng

for (int i = 0; i < invoiceList.Count; i++) 
    { 
     workSheet.Cells[1, 1, totalRows, totalCols].Copy(workSheet.Cells[i * totalRows + 1, 1]); 
    } 
+0

Làm thế nào tôi có thể cũng sao chép phong cách di động, vv backgroundcolor/biên giới của toàn bộ phạm vi? Cảm ơn – kassi

+2

@ kassi, Bạn có thể sao chép ô bằng kiểu vv bằng cách sử dụng giải pháp được liệt kê ở trên. Nếu bạn muốn sao chép phạm vi chỉ cần sử dụng 'workSheet.Cells [" A1: I1 "]. Sao chép (workSheet.Cells [" A4: I4 "]);' Kết quả: http://imgur.com/Ow4UUv5 –

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