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

C# Excel导入国际格式数字的数据分析错误,c#,excel,parsing,decimal,C#,Excel,Parsing,Decimal,我正在导入一个excel文件,我想将这些值添加到数据库中。在数据库中有一个类型decimal(18,5),我想将我的值0.00204添加到数据库中的该列。我的模型类中的变量是decimal类型,我正在尝试以下代码: Convert.ToDecimal(items[7]); 但是我得到的错误是,如果输入的格式不正确。 项目的类型为object[]。如何将值解析为十进制 其他的都很好: product.packSize = Convert.ToInt32(items[3])

我正在导入一个excel文件,我想将这些值添加到数据库中。在数据库中有一个类型decimal(18,5),我想将我的值0.00204添加到数据库中的该列。我的模型类中的变量是decimal类型,我正在尝试以下代码:

     Convert.ToDecimal(items[7]);
但是我得到的错误是,如果输入的格式不正确。 项目的类型为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]);

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

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

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

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
编辑 如果您正在处理区域性问题,您可以使用此
TryParse(对象、数字样式、IFormatProvider、out decimal)
并包括您的区域性(使用
en GB
作为示例):


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

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

对数组中的对象调用
ToString()
方法也可能有帮助,因为有时解析函数在解释对象时可能比解释它们的字符串更麻烦。

EDIT 如果您正在处理区域性问题,您可以使用此
TryParse(对象、数字样式、IFormatProvider、out decimal)
并包括您的区域性(使用
en GB
作为示例):


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

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



在数组中的对象上调用
ToString()
方法也可能有帮助,因为有时解析函数在解释对象时可能会遇到比字符串表示更大的麻烦。

这一行是否出现解析错误
product.Weight=Convert.ToDecimal(项[7])在运行时或从Excel应用程序中导入时?Excel单元格值是否具有任何格式,如货币?Convert.ToDecimal(Convert.ToString(items[7])。replace(“,”,“),尝试此操作您没有将任何响应标记为答案,从而使问题悬而未决……您遇到了什么问题吗?您是否在这一行
product.Weight=Convert.ToDecimal(项目[7])上遇到了解析错误在运行时或从Excel应用程序中导入时?Excel单元格值是否具有任何格式,如货币?Convert.ToDecimal(Convert.ToString(items[7])。replace(“,”,“),试试看,你没有把任何回答标记为答案,这让这个问题没有答案……你遇到了什么问题吗?事实上,在操作之前,一定要验证你的输入。。。说得好;-)项目[7]!=Convert.ToDecimal处理它时不需要null。@Dreamweaver是的,ToDecimal
处理它,但是,
ToString
不处理它。但这就是为什么我们需要使用ToString作为Convert.ToDecimal可以按原样处理对象的原因。给了我这个错误:输入字符串的格式不正确。事实上-在对输入进行操作之前,请始终验证您的输入。。。说得好;-)项目[7]!=当Convert.ToDecimal处理它时不需要null。@Dreamweaver是的,ToDecimal
处理,但ToString不处理。但那是什么,为什么我们需要将ToString用作Convert.ToDecimal可以按原样接收对象。给我这个错误:输入字符串的格式不正确。给我这个错误:输入字符串的格式不正确。watch中项目[7]的值是多少?这意味着返回的数据不是十进制。你能试试Console.WriteLine(items[7].ToString())吗;让我看看这个值到底是什么?我已经放弃了关于瑞典愚蠢的逗号句柄的讨论。我们使用,而不是。这就是为什么它说它不是正确的输入给我这个错误:输入字符串的格式不正确。watch中[7]项的值是多少?这意味着返回的数据不是小数。你能试试Console.WriteLine(items[7].ToString())吗;让我看看这个值到底是什么?我已经放弃了关于瑞典愚蠢的逗号句柄的讨论。我们使用,而不是。这就是为什么它说这不是一个正确的输入。这两种输入都不能解决问题,但会起到尝试捕捉的作用。因此,在本例中,对于异常,输出将为0。我已经放弃了关于逗号的瑞典愚蠢句柄的讨论。我们使用,而不是。这就是为什么它说这不是一个正确的输入。这两种输入都不能解决问题,但会起到尝试捕捉的作用。因此,在本例中,对于异常,输出将为0。我已经放弃了关于逗号的瑞典愚蠢句柄的讨论。我们使用,而不是。这就是为什么它说这不是一个正确的输入