Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
如何使用开放式XML SDK在C#中格式化开放式XML十进制值_C#_Asp.net Mvc_Openxml Sdk - Fatal编程技术网

如何使用开放式XML SDK在C#中格式化开放式XML十进制值

如何使用开放式XML SDK在C#中格式化开放式XML十进制值,c#,asp.net-mvc,openxml-sdk,C#,Asp.net Mvc,Openxml Sdk,我在MVC应用程序中有一个场景,我使用OPEN XML for real excel文件,然后在表视图中显示列表,带精度点的十进制值无法正确读取和格式化,我尝试了多次转换,但似乎不起作用。我试图将其格式设置为小数点后2位,我尝试使用数学。舍入,但似乎不起作用。请参阅下面的代码:这是在我的excel工作表中的“索赔总额”列值上 private static CleanSupplierClaim MappExcelOpenXMLtoGenericList(IList<string> ro

我在MVC应用程序中有一个场景,我使用OPEN XML for real excel文件,然后在表视图中显示列表,带精度点的十进制值无法正确读取和格式化,我尝试了多次转换,但似乎不起作用。我试图将其格式设置为小数点后2位,我尝试使用数学。舍入,但似乎不起作用。请参阅下面的代码:这是在我的excel工作表中的“索赔总额”列值上

private static CleanSupplierClaim MappExcelOpenXMLtoGenericList(IList<string> rowData, IList<string> columnNames)
    {

        var cleanSupplierClaims = new CleanSupplierClaim()
        {
            Action = rowData[columnNames.IndexFor("Action")],
            Line_Number = rowData[columnNames.IndexFor("Lineno")],
            Total_Claim = rowData[columnNames.IndexFor("TotalClaim")].ToDecimalNullable(), //Convert.ToDecimal(Math.Round(Convert.ToDouble(rowData[columnNames.IndexFor("TotalClaim")].ToDoubleNullable()),2)),

            Currency = rowData[columnNames.IndexFor("Currency")],
            ClaimReference = rowData[columnNames.IndexFor("ClaimReference")]
        };

        return cleanSupplierClaims;
    }
私有静态CleanSupplierClaim MappExcelOpenXMLtoGenericList(IList行数据,IList列名称)
{
var cleanSupplierClaims=new CleanSupplierClaim()
{
Action=rowData[columnNames.IndexFor(“Action”)],
行号=行数据[columnNames.IndexFor(“Lineno”)],
Total_Claim=rowData[columnNames.IndexFor(“TotalClaim”)].ToDecimalNullable(),//Convert.ToDecimal(Math.Round(Convert.ToDouble(rowData[columnNames.IndexFor(“TotalClaim”)].todoublenulable()),2),
Currency=rowData[columnNames.IndexFor(“货币”)],
ClaimReference=rowData[columnNames.IndexFor(“ClaimReference”)]
};
返回供应商索赔;
}
下面是我用来读取单元格值的泛型类:

    private static string GetCellValue(SpreadsheetDocument document, Cell cell)
{
    if (cell == null) return null;
    string value = cell.InnerText;

    //Process values particularly for those data types.
    if (cell.DataType != null)
    {
        switch (cell.DataType.Value)
        {
            //Obtain values from shared string table.
            case CellValues.SharedString:
                var sstPart = document.WorkbookPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();
                value = sstPart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText.Trim();
                break;

            //Optional boolean conversion.
            case CellValues.Boolean:
                var booleanToBit = ConfigurationManager.AppSettings["BooleanToBit"];
                if (booleanToBit != "Y")
                {
                    value = value == "0" ? "FALSE" : "TRUE";
                }
                break;

            case CellValues.Number:
                return Convert.ToDecimal(cell.CellValue.Text).ToString();
            default:
                if (cell.CellValue != null)
                    return cell.CellValue.Text;
                return string.Empty;

        }
    }
    return value;
}
私有静态字符串GetCellValue(电子表格文档,单元格)
{
if(cell==null)返回null;
字符串值=cell.InnerText;
//处理特别是那些数据类型的值。
if(cell.DataType!=null)
{
开关(cell.DataType.Value)
{
//从共享字符串表中获取值。
案例CellValues.SharedString:
var sstPart=document.WorkbookPart.GetPartsOfType().FirstOrDefault();
value=sstPart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText.Trim();
打破
//可选的布尔转换。
大小写单元格值。布尔值:
var booleanToBit=ConfigurationManager.AppSettings[“booleanToBit”];
if(booleanToBit!=“Y”)
{
值=值==“0”?“假”:“真”;
}
打破
案例单元值。编号:
返回Convert.ToDecimal(cell.CellValue.Text).ToString();
违约:
if(cell.CellValue!=null)
返回cell.CellValue.Text;
返回字符串。空;
}
}
返回值;
}
我尝试过的所有格式要么跳过带小数的值,要么返回值为0,它对整数很有效,请协助


这是在使用VS 2013和OPEN XML的MVC应用程序中,十进制字符串是什么样子的?我打赌它与
有关,
它有一个逗号,正如您指定的那样。以下是值857703和292,28的示例。此值的格式如下:292288888888888。我怎么能解决这个问题呢?哦,我以为你根本没有得到一个十进制值,只需使用
Convert.ToDecimal(cell.CellValue.Text).ToString(“F”)
@alexanderck在我的本地机器上出于某种原因,它会返回0作为多个十进制值,当我部署到服务器上时,它显示为2922888888,知道为什么吗?可能是您机器的区域性,请参阅,如果您使用
CultureInfo.InvariantCulture
是十进制分隔符,而
是千位分隔符。