c# - example - Célula de formato ClosedXML para contener fórmula
epplus c# (1)
Espero que alguien me pueda ayudar con ClosedXML ya que soy nuevo en la exportación de Excel y por lo que he visto de ClosedXML, la documentación es bastante limitada en ciertas áreas.
En este momento estoy colocando datos en una tabla de datos, formateando filas según su tipo correcto y exportando con el diseño correcto.
El problema ocurre cuando intento exportar una fila que contiene una fórmula repetitiva en cada celda.
Intenté agregar la fórmula simplemente como una cadena que luego puedo resaltar y convertir cuando se exporta el archivo, esto obviamente no es Ideal. Encontré una clase en XML llamada XLFormula
que no tiene absolutamente ninguna documentación pero supongo que debería estar haciendo algo con esto.
En este momento tengo (comentada es la forma en que estaba usando XLFormula
, estaba tratando de pasar XLFormula
la fórmula como una cadena y establecer como oferta total por unidad):
dt.Columns.Add("Qty", typeof(int));
dt.Columns.Add("Bid Per Unit GBP", typeof(double));
dt.Columns.Add("Total Bid GBP"); //typeof(XLFormula)
foreach (DataRow dr in dt.Rows)
{
//XLFormula totalBidFormula = new XLFormula();
dr["Qty"] = 1;
dr["Bid Per Unit GBP"] = 0.00;
dr["Total Bid GBP"] = "=[@Qty]*[@[Bid Per Unit GBP]]";
Cualquier ayuda sería muy apreciada. Si lo que estoy tratando de hacer es imposible con ClosedXML, por favor hágamelo saber y si pudiera sugerir un exportador XML alternativo (incluso si se paga) ¡eso sería útil!
En caso de que alguien se encuentre con este que está en la misma posición que yo, las fórmulas en closedXML son bastante sencillas.
Por lo que entiendo, las fórmulas se deben aplicar directamente a la celda después de que se hayan agregado sus valores.
Usé un bucle for para obtener la celda actual a medida que se procesaba la hoja, ya que necesitaba una columna completa para contener una fórmula
//get all rows in my datatable
int totalRows = dt.Rows.Count;
//set the first that will be filled with data
int currentRow = 1;
//loop through each row.
for(int i = 0; i < totalRows; i++){
//the current cell will be whatever column you wish to format + the current row
string currentCell = "F" + currentRow;
//create your formula
string AdjustedPriceFormula = "=C" + currentRow + "*" + "D" + currentRow;
//apply your formula to the cell.
theSheet.Cells(currentCell).FormulaA1 = AdjustedPriceFormula;
//increment your counters to apply the same data to the following row
currentRow++
Esto me ha funcionado varias veces desde entonces y ha agregado varias fórmulas a múltiples columnas / celdas.
¡Espero que esto ayude a alguien!