2016-10-10 37 views
7

Dinamik olarak oluşturulan excel sayfası var, bazı sütunları tarih olarak biçimlendirmek istiyorum ancak bu sütunların dizinini önceden bilmiyorum sadece başlık başlığını biliyorum.Epplus sütununu kullanarak sütun bul

1- Ben Şimdi ben adı "Doğum" ile örnek sütun için biçimlendirebilirsiniz kısa tarih alanını olunacağını DataTable

var templateXls = new ExcelPackage(); 
     var sheet = templateXls.Workbook.Worksheets.Add(parameters.ReportName); 

     sheet.Cells["A1"].LoadFromDataTable(myDataTable, true); 

den excel yüklemek? Sütun herhangi bir endekste olabilir, kullanıcı seçimine bağlıdır, ayrıca kolonun üretilmemesi olasılığı vardır.

cevap

4

ait "1" başlamak olduğunu akılda tutmak. Yani kod parçasındaki kapalı tabanlı (bazı boş referans kontrolleri eklemek isteyebilirsiniz):

var idx = sheet 
    .Cells["1:1"] 
    .First(c => c.Value.ToString() == "Birthdate") 
    .Start 
    .Column; 

sheet.Column(idx).Style.Numberformat.Format = "mm-dd-yy"; 
5

İlk satırda bu şekilde hücrelerin değerlerini ayıklamak (kullanıcı bunu içermiyorsa):

 using (ExcelPackage package = new ExcelPackage(new FileInfo(filePath))) 
     { 
      foreach (ExcelWorksheet worksheet in package.Workbook.Worksheets) 
      { 
       List<string> ColumnNames = new List<string>(); 
       for(int i = 1; i <= worksheet.Dimension.End.Column; i++) 
       { 
        ColumnNames.Add(worksheet.Cells[1, i].Value.ToString()); // 1 = First Row, i = Column Number 
       } 
      } 
     } 

Sonra devam edebilirsiniz

ilgi alanlarınıza göre karşılaştırmak.

Sadece listeleri ve diziler aksine satır ve sütun indeksleri yerine de biraz linq yapabilir misin "0"

7

Ayrıca böyle uzantısı Yöntem kullanabilir:

public static class EpPlusExtensionMethods 
{ 
    public static int GetColumnByName(this ExcelWorksheet ws, string columnName) 
    { 
     if (ws == null) throw new ArgumentNullException(nameof(ws)); 
     return ws.Cells["1:1"].First(c => c.Value.ToString() == columnName).Start.Column; 
    } 
} 

ve onu kullanın:

int columnId = ws.GetColumnByName("Birthdate"); 
+0

["1: 1"] sütun numarasını kontrol edeceğinden emin misiniz? Sanırım 1: 1'den başka bir şey geçmek istiyorsun. Eğer doğruysa o zaman 1: 1'in ne olduğunu açıklayabilir misiniz? teşekkür ederim –