Excel导入国际格式化数字的数据分析错误

时间:2015-06-04 13:06:14

标签: c# excel parsing decimal

我导入了一个excel文件,我想将这些值添加到数据库中。在数据库中有一个十进制类型(18,5),我想将我的值0.00204添加到数据库中的该列。我的模型类中的变量是十进制类型,我尝试使用此代码:

     Convert.ToDecimal(items[7]);

然后我得到输入错误,如果格式不正确。 items的类型为object []。如何将值解析为小数?

所有其他工作都很好:

       product.packSize = Convert.ToInt32(items[3]);
                product.leadTime = Convert.ToString(items[4]);
                product.generalAccessoryCategoryId = Convert.ToInt32(items[5]);
                product.Company = Convert.ToString(items[6]);
                product.Weight = Convert.ToDecimal(items[7]);

3 个答案:

答案 0 :(得分:3)

检查可能存在的任何阶段的可能错误情况,然后一旦安全,提取字符串:

decimal result;

if ((items!= null) && 
    (items.Any()) && 
    (items[7] != null) && 
    (Decimal.TryParse(items[7].ToString(), out result))
      product.Weight = result;

经过几次评论和一些调查后,我认为项目[7]具有转换不期望的字符。我已经更新了上面的答案。

decimal result;

Decimal.TryParse("0a00204", out result); // Returns false

答案 1 :(得分:2)

修改

如果您正在处理文化问题,可以使用此TryParse(Object, NumberStyles, IFormatProvider, out decimal)并包含您的文化(使用en-GB作为示例):

decimal.TryParse(items[7], NumberStyles.Any, CultureInfo.GetCultureInfo("en-GB"), out product.Weight);

如果项变量具有默认值,则可以使用TryParse,如果可以解析该值,则将替换该值,或将其保留为默认值。否则,您可以使用TryParse的结果(如果成功则为true,如果失败则为false)以确定是否需要设置该值。例如:

decimal.TryParse(items[7], out product.Weight)

OR

if(!decimal.TryParse(items[7], out product.Weight))
{
    product.Weight = (decimal)0;
}

在数组中的对象上调用ToString()方法也可能会有所帮助,因为有时解析对象的解析函数会比它们的String表示更麻烦。

答案 2 :(得分:1)

if(items != null && items[7] != null){
   product.Weight = decimal.Parse(items[7].ToString());
}