如何在OpenXML中为格式(#,###。##)创建Decimal的CellValue

时间:2016-05-23 19:36:38

标签: c# excel openxml

我目前正致力于使用Open XML框架导出Excel文件。我遇到的问题是,此电子表格的其中一列必须是十进制格式(#,###。##),它必须允许总和。我可以使用以下方法以此格式完美地导出Excel:

private static Cell CreateTextCell(string header, UInt32 index, object text, CellStyleIndex cellStyle)
{
    var cell = new Cell
    {
        DataType = CellValues.InlineString,
        CellReference = header + index,
        StyleIndex = (UInt32)cellStyle
    };

    var istring = new InlineString();
    var t = new Text { Text = text.ToString() };
    istring.AppendChild(t);
    cell.AppendChild(istring);
    return cell;
}

如您所见,我指定了 StyleIndex ,它应用了我提到的格式。但问题是Excel将此值识别为文本:

enter image description here

这就是我尝试创建一个新方法的原因,我想在文件中创建一个小数后立即调用它:

private static Cell CreateValueCell(string header, UInt32 index, decimal value, CellStyleIndex cellStyle)
{
     var cell = new Cell
     {
         DataType = CellValues.Number,
         CellReference = header + index,
         StyleIndex = (UInt32)cellStyle,
         CellValue = new CellValue(value.ToString())
     };

     return cell;
}

通过这样做,我知道如何转换为数字,但我丢失了小数位,如下图所示:

enter image description here

我看到了一个名为 DecimalValue 的类,但我无法弄清楚如何将其附加到单元格。有关如何解决它的任何想法?

1 个答案:

答案 0 :(得分:4)

您应该阅读that article

主要概念是将自定义CellFormatNumberingFormat

一起使用
 var nformat4Decimal = new NumberingFormat
                     {
                         NumberFormatId = UInt32Value.FromUInt32(iExcelIndex++),
                         FormatCode = StringValue.FromString("#,##0.0000")
                     };