with spreadsheetdocument read open office gratis documentformat descargar c# openxml openxml-sdk

spreadsheetdocument - read excel with openxml c#



Aplicar el formato de nĂºmero% a un valor de celda usando OpenXML (4)

Quiero aplicar el formato de número% (porcentaje) utilizando XML abierto C #

Tengo un valor numérico 3.6 que quiero mostrar ese número en Excel como `3.6%.

¿Cómo logro eso?


Desafortunadamente no hay una respuesta directa. Si descarga la Herramienta de productividad OpenXML para Microsoft Office, puede analizar una hoja de cálculo simple y ver cómo formatea el número. Para hacer lo que quieras, necesitarás:

  • Crear una hoja de estilo
  • Agrega un nuevo NumberFormat con tu definición personalizada
  • Cree un CellStyleFormat, completo con borde, relleno, fuente todo definido, además del NumberFormat arriba
  • Crear un CellFormats, que se refiere a lo anterior
  • Finalmente, establezca el StyleIndex de su celda con el ID de su CellFormat que utiliza NumberFormat.

¡UF!

Una opción generalmente mejor es mirar ClosedXML en http://closedxml.codeplex.com/ (nombre horrible). Es una biblioteca de código abierto (¡NO GPL! - revisa la licencia) que pone extensiones útiles en OpenXML. Para formatear una celda de una hoja de trabajo, en su lugar deberías hacer:

worksheet.Cell(row, col).Value = "0.036"; worksheet.Cell(row, col).Style.NumberFormat.Format = "0.0%";

(de http://closedxml.codeplex.com/wikipage?title=Styles%20-%20NumberFormat&referringTitle=Documentation )

ACTUALIZACIÓN ClosedXML se ha movido a GitHub en https://github.com/ClosedXML/ClosedXML


Excel contiene formatos predefinidos para formatear cadenas de varias maneras. El atributo s en un elemento de celda se referirá a un estilo que se referirá a un formato de número que corresponderá al formato de porcentaje que desea. Vea esta question/answer para más información.

Aquí está el objeto CellFormat que deberá crear para que la máscara de 0.00% se aplique a su número. En este caso, desea el formato predefinido número 10 o 0.00%:

CellFormat cellFormat1 = new CellFormat(){ NumberFormatId = (UInt32Value)10U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)0U, FormatId = (UInt32Value)0U, ApplyNumberFormat = true };

Aquí hay una manera rápida de insertar el CellFormat en el libro de trabajo:

CellFormats cellFormats = workbookPart.WorkbookStylesPart.Stylesheet.Elements<CellFormats>().First(); cellFormats.Append(cellFormat); uint styleIndex = (uint)cellFormats.Count++;

A continuación, deberá obtener la celda que tiene la 3.6 y establecer su atributo s (StyleIndex) al formato de celda recién insertado:

Cell cell = workSheetPart.Worksheet.Descendants<Cell>().SingleOrDefault(c => cellAddress.Equals("A1")); cell.StyleIndex = styleIndex;


Puedes hacerlo de una manera sencilla. Si quieres aplicarlo en una sola celda, haz esto,

worksheet.Cell(9, 10).Style.NumberFormat.Format = "#,##0.00//%";

Y si desea aplicarlo en un rango de celdas, haga esto,

worksheet.Range(9, 10, 15, 10).Style.NumberFormat.Format = "#,##0.00//%";

También puede encontrar más formatos Here , y también puede encontrar los mismos en Excel.


WorkbookStylesPart sp = workbookPart.AddNewPart<WorkbookStylesPart>();

Crear una hoja de estilo,

sp.Stylesheet = new Stylesheet();

Crear un formato de numeración,

sp.Stylesheet.NumberingFormats = new NumberingFormats(); // #.##% is also Excel style index 1


NumberingFormat nf2decimal = new NumberingFormat(); nf2decimal.NumberFormatId = UInt32Value.FromUInt32(3453); nf2decimal.FormatCode = StringValue.FromString("0.0%"); sp.Stylesheet.NumberingFormat.Append(nf2decimal);

Crear un formato de celda y aplicar el ID de formato de numeración

cellFormat = new CellFormat(); cellFormat.FontId = 0; cellFormat.FillId = 0; cellFormat.BorderId = 0; cellFormat.FormatId = 0; cellFormat.NumberFormatId = nf2decimal.NumberFormatId; cellFormat.ApplyNumberFormat = BooleanValue.FromBoolean(true); cellFormat.ApplyFont = true; //append cell format for cells of header row sp.Stylesheet.CellFormats.AppendChild<CellFormat>(cellFormat); //update font count sp.Stylesheet.CellFormats.Count = UInt32Value.FromUInt32((uint)sp.Stylesheet.CellFormats.ChildElements.Count); //save the changes to the style sheet part sp.Stylesheet.Save();

y cuando agregue el valor a la celda, tenga el siguiente código del centro aquí en la versión y aplique el índice de estilo en mi caso, tuve un índice de tres estilos, por lo que el 3 fue mi índice de estilo de porcentaje, es decir 2, ya que los índices comienzan desde 0

string val = Convert.ToString(Convert.ToDecimal(value)/100); Cell cell = new Cell(); cell.DataType = new EnumValue<CellValues>(CellValues.Number); cell.CellValue = new CellValue(val); cell.StyleIndex = 2; row.Append(cell);