Je souhaite appliquer le format numérique% (pourcentage) à l'aide de XML ouvert C #
J'ai la valeur numérique 3.6 que je veux afficher ce nombre dans Excel comme `3,6%.
Comment puis-je y parvenir?
WorkbookStylesPart sp = workbookPart.AddNewPart<WorkbookStylesPart>();
Créez une feuille de style,
sp.Stylesheet = new Stylesheet();
Créez un format de numérotation,
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);
Créez un format de cellule et appliquez l'ID du format de numérotation
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();
et lorsque vous ajoutez la valeur à la cellule, ayez le code central suivant dans la version et appliquez l'index de style dans mon cas, j'avais trois index de style, donc le 3 était mon index de style en pourcentage, c'est-à-dire 2 puisque les index commencent à partir de 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);
Malheureusement, il n'y a pas de réponse simple. Si vous téléchargez l'Outil de productivité OpenXML pour Microsoft Office, vous pouvez disséquer une simple feuille de calcul et voir comment elle met en forme le nombre. Pour faire exactement ce que vous voulez, vous devez:
OUF!
Une option généralement meilleure consiste à regarder ClosedXML à http://closedxml.codeplex.com/ (nom horrible). C'est une bibliothèque open source (PAS GPL! - vérifiez la licence) qui met des extensions utiles sur OpenXML. Pour formater une cellule d'une feuille de calcul, vous devez plutôt:
worksheet.Cell(row, col).Value = "0.036";
worksheet.Cell(row, col).Style.NumberFormat.Format = "0.0%";
(depuis http://closedxml.codeplex.com/wikipage?title=Styles%20-%20NumberFormat&referringTitle=Documentation )
[~ # ~] mise à jour [~ # ~] ClosedXML est passé à GitHub à https://github.com/ClosedXML/ClosedXML
Excel contient des formats prédéfinis pour formater les chaînes de différentes manières. L'attribut s
sur un élément de cellule fera référence à un style qui fera référence à un format numérique qui correspondra au format de pourcentage souhaité. Voir ceci question/réponse pour plus d'informations.
Voici l'objet CellFormat que vous devrez créer pour que le masque de 0,00% soit appliqué à votre numéro. Dans ce cas, vous voulez le numéro de format prédéfini 10 ou 0,00%:
CellFormat cellFormat1 = new CellFormat(){ NumberFormatId = (UInt32Value)10U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)0U, FormatId = (UInt32Value)0U, ApplyNumberFormat = true };
Voici un moyen rapide d'insérer le CellFormat dans le classeur:
CellFormats cellFormats = workbookPart.WorkbookStylesPart.Stylesheet.Elements<CellFormats>().First();
cellFormats.Append(cellFormat);
uint styleIndex = (uint)cellFormats.Count++;
Vous devrez ensuite récupérer la cellule contenant le 3.6 et définir son attribut s
(StyleIndex) au format de cellule nouvellement inséré:
Cell cell = workSheetPart.Worksheet.Descendants<Cell>().SingleOrDefault(c => cellAddress.Equals("A1"));
cell.StyleIndex = styleIndex;
Vous pouvez le faire de manière simple. Si vous souhaitez l'appliquer sur une seule cellule, faites-le,
worksheet.Cell(9, 10).Style.NumberFormat.Format = "#,##0.00\\%";
Et si vous voulez l'appliquer sur une gamme de cellules, faites-le,
worksheet.Range(9, 10, 15, 10).Style.NumberFormat.Format = "#,##0.00\\%";
vous pouvez également trouver plus de formats ici , et vous pouvez également trouver la même chose dans Excel.