when read patterntype not font ejemplos color c# asp.net epplus

c# - read - epplus color font



¿Cómo establecer el color de la celda programáticamente epplus? (3)

¡Gracias Ernie! Lo cambié ligeramente para permitir mi encabezado en Excel y también para asegurarme de que el código no se inicie en E1. Usé ws.cells [i + 2, 5] para hacer esto. ¡Aclamaciones!

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

Me preguntaba si es posible establecer el color de la celda mediante programación con epplus.

Cargo mis datos de un procedimiento almacenado de SQL y funciona bien, pero mis usuarios desean que las celdas que contienen las palabras ''Licencia anual'' tengan un color de fondo de color amarillo claro en lugar del blanco predeterminado. ¿Hay alguna forma de hacer esto? Tal vez por iterar a través de un datatable quizás? Debajo es donde

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


Puede intentar usar la opción de formato condicional en EPPlus

aqui esta su muestra

Y aquí hay una publicación SO con otra persona que ha utilizado esta opción.

Por lo general, usar enlaces como respuestas no es mi estilo, pero no hay razón para rehacer esas ruedas, si la muestra de EPP desaparece, supongo que sí, y si la muestra SO se ha ido, entonces supongo que sí con esta respuesta.

Espero eso ayude


Revise su línea:

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

Si es una tabla .net estándar, ¿no .ToString() a "System.Data.DataRow" ? También será necesario ajustar ws.Cells["E1"] para cada celda después de recorrer el conteo de filas (básicamente, lo que estaba diciendo krillgar).

Algo como eso:

[TestMethod] public void Cell_Color_Background_Test() { //http://.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(); }