Cuando escribo una tabla completa en una hoja de cálculo de Excel, sé que debo trabajar con todo un Rango a la vez en lugar de escribir en celdas individuales. Sin embargo, ¿hay alguna manera de especificar el formato cuando estoy completando la matriz que voy a exportar a Excel?Cómo especificar el formato de celdas individuales con Excel.Range.set_Value()
Aquí es lo que hago ahora:
object MissingValue = System.Reflection.Missing.Value;
Excel.Application excel = new Excel.Application();
int rows = 5;
int cols = 5;
int someVal;
Excel.Worksheet sheet = (Excel.Worksheet)excel.Workbooks.Add(MissingValue).Sheets[1];
Excel.Range range = sheet.Range("A1", sheet.Cells(rows,cols));
object[,] rangeData = new object[rows,cols];
for(int r = 0; r < rows; r++)
{
for(int c = 0; c < cols; c++)
{
someVal = r + c;
rangeData[r,c] = someVal.ToString();
}
}
range.set_Value(MissingValue, rangeData);
Ahora supongamos que yo quiero algunos de esos números para ser formateado como porcentajes. Sé que puedo volver celda por celda y cambiar el formato, pero eso parece frustrar todo el propósito de usar una sola llamada Range.set_Value(). ¿Puedo hacer que mi estructura rangeData [,] incluya información de formato, para que cuando llame a set_Value(), las celdas estén formateadas de la forma que yo las quiera?
Para aclarar, sé que puedo establecer el formato para todo el objeto Excel.Range. Lo que quiero es tener un formato diferente especificado para cada celda, especificado en el ciclo interno.
Aunque acepté mi propia respuesta, lo que he decidido es que usar la automatización de Excel para escribir archivos es un mal plan. En el futuro, estoy usando la biblioteca ExcelPackage para escribir directamente.xlsx files –
+ uno por ser una buena pieza de código;) No sabía que podrías usar un FormatSpecifier para establecer un rango de celdas. –