Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在OpenXML中为格式为(#,####.##)的十进制创建单元格值_C#_Excel_Openxml - Fatal编程技术网

C# 如何在OpenXML中为格式为(#,####.##)的十进制创建单元格值

C# 如何在OpenXML中为格式为(#,####.##)的十进制创建单元格值,c#,excel,openxml,C#,Excel,Openxml,我目前的工作是使用开放式XML框架导出Excel文件。我的问题是,这个电子表格的其中一列必须是十进制格式(#,###.##.#),必须允许求和。我可以使用以下方法以这种格式完美导出Excel: private static Cell CreateTextCell(string header, UInt32 index, object text, CellStyleIndex cellStyle) { var cell = new Cell { DataType =

我目前的工作是使用开放式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将此值识别为文本:

这就是为什么我试图创建一个新方法,只要我想在文件中创建一个十进制数,就会调用该方法:

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;
}
通过这样做,我了解了如何将其转换为数字,但我丢失了小数点,如下图所示:

我看到一个名为DecimalValue的类,但我不知道如何将其附加到单元格中。有没有关于如何解决这个问题的想法

你应该阅读

主要概念是将自定义的
CellFormat
NumberingFormat
一起使用:

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