我想使用开放 XML C# 应用 %(百分比)数字格式
我有数值 3.6,我想在 Excel 中将该数字显示为“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.NumberingFormats.Append(nf2decimal);
创建单元格格式并应用编号格式 id
CellFormat 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 是我的百分比样式索引,即 2,因为索引从 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);
不幸的是,没有直接的答案。 如果您下载了适用于 Microsoft Office 的 OpenXML 生产力工具,您可以剖析一个简单的电子表格并查看它如何格式化数字。 为了做你想做的事,你需要:
哇!
通常更好的选择是查看 ClosedXML,网址为 http://closexml.codeplex.com/(可怕的名字)。 它是一个开源(不是 GPL! - 检查许可证)库,对 OpenXML 进行了有用的扩展。 要设置工作表单元格的格式,您可以这样做:
worksheet.Cell(row, col).Value = "0.036";
worksheet.Cell(row, col).Style.NumberFormat.Format = "0.0%";
(来自 http://closexml.codeplex.com/wikipage?title=Styles%20-%20NumberFormat&referringTitle=Documentation)
更新 ClosedXML 已移至 GitHub,网址为 https://github.com/ClosedXML/ClosedXML
Excel 包含预定义的格式,可以以各种方式格式化字符串。 单元格元素上的
s
属性将引用一种样式,该样式将引用与您想要的百分比格式相对应的数字格式。 请参阅此问题/答案了解更多信息。
这是您需要创建的 CellFormat 对象,以便将 0.00% 掩码应用于您的号码。 在这种情况下,您需要预定义的格式数字 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 中找到相同的格式。