quiero aplicar el formato de número% el uso de XML abierto de C#La aplicación de formato de número% a un valor de celda usando OpenXml
tengo valor decimal 3,6 quiero mostrar ese número en Excel como 3,6% ¿Cómo logro esta. Por favor, hágamelo saber.
quiero aplicar el formato de número% el uso de XML abierto de C#La aplicación de formato de número% a un valor de celda usando OpenXml
tengo valor decimal 3,6 quiero mostrar ese número en Excel como 3,6% ¿Cómo logro esta. Por favor, hágamelo saber.
WorkbookStylesPart sp = workbookPart.AddNewPart<WorkbookStylesPart>();
Crear una hoja de estilo,
sp.Stylesheet = new Stylesheet();
Crear un numberingformat,
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 la Identificación del 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 usted adiciona el valor de la celda tienen la siguiente hereonversion código de centro y aplicar el índice estilo en mi caso tenía tres índice de estilo de ahí el 3 uno era 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);
Desafortunadamente no hay una respuesta directa. Si descarga la herramienta de productividad OpenXML para Microsoft Office, puede diseccionar una hoja de cálculo simple y ver cómo formatea el número. Para hacer precisamente lo que quiere usted tendría que:
WHEW!
Una opción generalmente mejor es mirar ClosedXML al http://closedxml.codeplex.com/ (nombre horrible). Es una biblioteca de código abierto (¡NO GPL! - verifique la licencia) que pone extensiones útiles en OpenXML. Para dar formato a una celda de una hoja de trabajo, que le hace lugar:
worksheet.Cell(row, col).Value = "0.036";
worksheet.Cell(row, col).Style.NumberFormat.Format = "0.0%";
(desde http://closedxml.codeplex.com/wikipage?title=Styles%20-%20NumberFormat&referringTitle=Documentation)
ACTUALIZACIÓN ClosedXML se ha trasladado a GitHub en https://github.com/ClosedXML/ClosedXML
esto puede funcionar, no obstante requiere una adición de terceros, no un OpenXml "simple". – fcm
Excel contiene predefinido formatos para formatear cadenas de varias maneras. El atributo s
en un elemento de celda hará referencia a un estilo que se referirá a un formato de número que corresponderá al formato de porcentaje que desee. Consulte esto question/answer para obtener más información.
Aquí está el objeto CellFormat que deberá crear para aplicar la máscara de 0.00% a su número. En este caso, desea que el número de formato predefinido 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í es una forma rápida de insertar el CellFormat en el libro:
CellFormats cellFormats = workbookPart.WorkbookStylesPart.Stylesheet.Elements<CellFormats>().First();
cellFormats.Append(cellFormat);
uint styleIndex = (uint)cellFormats.Count++;
A continuación, tendrá que obtener la célula que tiene el 3.6 en él y establece que es s
atributo (StyleIndex) para el formato de celda recién insertado:
Cell cell = workSheetPart.Worksheet.Descendants<Cell>().SingleOrDefault(c => cellAddress.Equals("A1"));
cell.StyleIndex = styleIndex;
Puede hacerlo de una manera sencilla. Si desea aplicarlo en una sola célula entonces hacer esto,
worksheet.Cell(9, 10).Style.NumberFormat.Format = "#,##0.00\\%";
Y si desea aplicarlo en un rango de celdas y luego hacer esto,
worksheet.Range(9, 10, 15, 10).Style.NumberFormat.Format = "#,##0.00\\%";
podrá ver también más formatos Here , y también puedes encontrar lo mismo desde Excel también.
Esto no es OpenXml como se indica en la pregunta. – fcm
Este flujo funcionó porque podemos tener cualquier formateo celular usando este proceso. Gracias ssyladin – Selwyn
Sin preocupaciones. En realidad, pasamos ~ 30 minutos tratando de hacer el formateo "manualmente" solo con OpenXML y finalmente nos damos por vencidos. Conservó obtener una hoja de cálculo corrupta. Esta es una buena respuesta para mí, ya que ayuda a evitar dependencias externas de la biblioteca. – jklemmack
¿Su comentario sobre el índice de estilo de Excel significa que, si desea usar el estilo predeterminado de porcentaje de Excel, que no necesita agregar un nuevo formato, simplemente configure la celda para el índice de estilo 1? – cidthecoatrack