オープンXML C#を使用して%(パーセント)数値形式を適用したい
Excelでその数値を「3.6%」として表示したい数値3.6があります。
どうすればそれを達成できますか?
WorkbookStylesPart sp = workbookPart.AddNewPart<WorkbookStylesPart>();
スタイルシートを作成し、
sp.Stylesheet = new Stylesheet();
ナンバリング形式を作成し、
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);
セル形式を作成し、番号付け形式IDを適用します
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();
セルに値を追加すると、次のセンターコードがあり、スタイルインデックスを適用します私のスタイルでは3つのスタイルインデックスがあり、3はインデックススタイルが0から始まるため、パーセントスタイルインデックスつまり2でした
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);
残念ながら、簡単な答えはありません。 Microsoft Office用のOpenXML Productivity Toolをダウンロードすると、簡単なスプレッドシートを分析して、数値のフォーマットを確認できます。必要なことを行うには、次の操作が必要です。
うわー!
一般的に良いオプションは、ClosedXMLを http://closedxml.codeplex.com/ (horrid name)で見ることです。 OpenXMLに便利な拡張機能を追加するオープンソース(GPLではありません!-ライセンスを確認してください)ライブラリです。ワークシートのセルをフォーマットするには、代わりに次のようにします。
worksheet.Cell(row, col).Value = "0.036";
worksheet.Cell(row, col).Style.NumberFormat.Format = "0.0%";
( http://closedxml.codeplex.com/wikipage?title=Styles%20-%20NumberFormat&referringTitle=Documentation から)
[〜#〜] update [〜#〜]ClosedXMLはGitHubの https://github.com/ClosedXML/ClosedXMLに移動しました
Excelには、さまざまな方法で文字列をフォーマットするための定義済みフォーマットが含まれています。セル要素のs
属性は、必要なパーセント形式に対応する数値形式を参照するスタイルを参照します。詳細は question/answer をご覧ください。
以下は、0.00%マスクを数値に適用するために作成する必要があるCellFormatオブジェクトです。この場合、定義済みのフォーマット番号10または0.00%が必要です。
CellFormat cellFormat1 = new CellFormat(){ NumberFormatId = (UInt32Value)10U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)0U, FormatId = (UInt32Value)0U, ApplyNumberFormat = true };
CellFormatをブックに挿入する簡単な方法を次に示します。
CellFormats cellFormats = workbookPart.WorkbookStylesPart.Stylesheet.Elements<CellFormats>().First();
cellFormats.Append(cellFormat);
uint styleIndex = (uint)cellFormats.Count++;
次に、3.6を含むセルを取得し、s
属性(StyleIndex)を新しく挿入されたセル形式に設定する必要があります。
Cell cell = workSheetPart.Worksheet.Descendants<Cell>().SingleOrDefault(c => cellAddress.Equals("A1"));
cell.StyleIndex = styleIndex;
簡単な方法でそれを行うことができます。単一のセルに適用する場合は、これを行います、
worksheet.Cell(9, 10).Style.NumberFormat.Format = "#,##0.00\\%";
セル範囲に適用したい場合は、これを行います、
worksheet.Range(9, 10, 15, 10).Style.NumberFormat.Format = "#,##0.00\\%";
より多くの形式を見つけることもできます ここ また、Excelからも同じ形式を見つけることができます。