2015-02-23 21 views
15

Epplus kullanarak programatik olarak hücre rengini ayarlamak mümkün olup olmadığını mı merak ediyordum?Hücre rengi programatik olarak nasıl ayarlanır epplus?

Verilerimi bir sql depolanmış yordamdan yükledim ve iyi çalışıyor, ancak kullanıcılar varsayılan beyaz yerine açık sarı bir arka plan rengine sahip 'Yıllık İzin' sözcüklerini içeren hücrelerini istiyor. Bunu yapmanın bir yolu var mı? belki de bir veritabanın üzerinden yineleyerek? Aşağıda nerede

public void ExportTableData(DataTable dtdata) 
{ 
    //Using EPPLUS to export Spreadsheets 
    ExcelPackage pck = new ExcelPackage(); 
    var ws = pck.Workbook.Worksheets.Add("Availability list"); 

    ws.Cells["A1"].LoadFromDataTable(dtdata, true); 

    ws.Cells["A1:G1"].Style.Font.Bold = true; 
    ws.Cells["A1:G1"].Style.Font.UnderLine = true; 

    //change cell color depending on the text input from stored proc? 
    if (dtdata.Rows[4].ToString() == "Annual Leave") 
    { 
     ws.Cells["E1"].Style.Fill.PatternType = ExcelFillStyle.Solid; 
     ws.Cells["E1"].Style.Fill.BackgroundColor.SetColor(Color.LightYellow); 
    } 

    pck.SaveAs(Response.OutputStream); 
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
    Response.AddHeader("content-disposition", "attachment; filename=Availability.xlsx"); 
    Response.End(); 
} 
+0

Peki, burada sahip olduğunuz şeyle ne çalışmaz? net bir soru görmediğim için üzgünüm. – workabyte

+0

Temelde, "Yıllık izin", "Kullanılabilir", "hasta", "emekli" vb. Verileri içerebilen bir sütunu ve bu metne bağlı olarak, içeren hücrenin rengini programsal olarak değiştirmek istiyorum. ör. "Yıllık izin" yazıyorsa açık sarı, "kullanılabilir" ve benzeri yerlerde yeşil hücre. Şu anda – wubblyjuggly

+0

rengini değiştirmiyor, yani neye sahip değilsiniz? ne yapıyor? İstediğiniz sonucu tamamen anlayın ama oraya gitmekten ne engeliniz? – workabyte

cevap

18

senin hattını kontrol yardımcı olur umarım? Ayrıca, ws.Cells["E1"] numaralı satırın, satır sayısı boyunca döngü yaptıktan sonra her bir hücre için ayarlanması gerekecektir (temel olarak krillgar'ın söylediği). Böyle

şey:

[TestMethod] 
public void Cell_Color_Background_Test() 
{ 
    //http://stackoverflow.com/questions/28679602/how-to-set-cell-color-programmatically-epplus 

    //Throw in some data 
    var dtdata = new DataTable("tblData"); 
    dtdata.Columns.Add(new DataColumn("Col1", typeof(string))); 
    dtdata.Columns.Add(new DataColumn("Col2", typeof(int))); 
    dtdata.Columns.Add(new DataColumn("Col3", typeof(int))); 

    for (var i = 0; i < 20; i++) 
    { 
     var row = dtdata.NewRow(); 
     row["Col1"] = "Available"; 
     row["Col2"] = i * 10; 
     row["Col3"] = i * 100; 
     dtdata.Rows.Add(row); 
    } 
    //throw in one cell that triggers 
    dtdata.Rows[10]["Col1"] = "Annual leave"; 

    var existingFile = new FileInfo(@"c:\temp\temp.xlsx"); 
    if (existingFile.Exists) 
     existingFile.Delete(); 

    using (var pck = new ExcelPackage(existingFile)) 
    { 
     //Using EPPLUS to export Spreadsheets 
     var ws = pck.Workbook.Worksheets.Add("Availability list"); 

     ws.Cells["A1"].LoadFromDataTable(dtdata, true); 

     ws.Cells["A1:G1"].Style.Font.Bold = true; 
     ws.Cells["A1:G1"].Style.Font.UnderLine = true; 

     //change cell color depending on the text input from stored proc? 
     //if (dtdata.Rows[4].ToString() == "Annual Leave") 
     for (var i = 0; i < dtdata.Rows.Count; i++) 
     { 
      if (dtdata.Rows[i]["Col1"].ToString() == "Annual leave") 
      { 
       ws.Cells[i + 1, 1].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
       ws.Cells[i + 1, 1].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightYellow); 
      } 
     } 

     pck.Save(); 
    } 
+0

Neredeyse orada! "Aralık, stil için geçerli değil: E0" hatası verir, bir döngü kullanıldığı gibi 0'da başlar. Excel'de başlıktan dolayı stil 2 hücrenin aşağı doğru hareket etmesi ve – wubblyjuggly

+0

sıfır tabanlı bir indeks kullanması gerekir. biraz aşağıda görüyoruz. Şerefe! – wubblyjuggly

+0

@wubblyjuggly Cool. Evet, 0'a karşı 1 endeksini unutmak çok kolay - '+ 1' yukarıdaki gibi. Sevindim, senin için çalışıyor. – Ernie

0

Sen EPPlus

koşullu biçimlendirme seçeneğini kullanarak deneyebilirsiniz

here is their sample

ve burada bu seçeneği

Genellikle kullanarak bağlantılar olarak kullandı başkası ile bir SO post olduğunu cevaplar benim tarzım değil ama EPP örneği uzaklaşıyor sanırım bu tekerlekleri yeniden denemek için bir neden yok ve eğer SO örneği gitmişse o zaman bu cevapla tahmin ediyorum. o .ToString()"System.Data.DataRow" için değerlendirmek standart .net masa wouldnt ise

if (dtdata.Rows[4].ToString() == "Annual Leave") 

:

o

2

Teşekkür Ernie! Başlığımı excel'e izin vermek ve kodun E1'de başlamadığından emin olmak için biraz değiştirdim. Bunu yapmak için ws.cells [i + 2, 5] kullandım. Şerefe!

for (var i = 0; i < dtdata.Rows.Count; i++) 
     { 

      if (dtdata.Rows[i]["typeName"].ToString() == "Annual Leave") 
      { 
       ws.Cells[i + 2, 5].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
       ws.Cells[i + 2, 5].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightYellow); 
      } 

      else if (dtdata.Rows[i]["typeName"].ToString() == "Available") 
      { 
       ws.Cells[i + 2, 5].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
       ws.Cells[i + 2, 5].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGreen); 
      } 
      else 
      { 
       ws.Cells[i + 2, 5].Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; 
       ws.Cells[i + 2, 5].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.White); 
      } 
     } 
İlgili konular