这是我的问题。我正在导入带有时间字段的字段的Excel文件。在我做的时候在某些服务器上(法语)
double cellValueAsDouble = double.Parse(cellValue.Replace(".", ","));
MyDate.AddDays(cellValueAsDouble);
添加超过12小时它的工作原理。但是在另一台服务器上(英文)我抛出ArgumentOutOfRangeException时出错。如果我放的时间少于或是12:00:00,它可以正常工作。有谁知道为什么以及如何解决这个问题?
答案 0 :(得分:2)
我试着猜测答案:
cellValue
包含逗号作为小数点分隔符。所以这是
价值是例如0,5833333333
。 0.5833333
- 58333333333
。 您的软件不希望将点'.'
作为小数点分隔符,而是在目标系统上配置的任何内容。只要excel源保留在同一台计算机上,您就不必进行任何交换。
另外,它是真的和XLS格式还是你在谈论CSV?如果您的数据来自以CSV格式导出的法语EXCEL,则最终将使用逗号格式化十进制值。现在,您在本地 PC(我猜有美国文化)上检查您的软件,然后添加代码以用点替换逗号。哇,它现在适用于您的PC!但是不要指望相同的代码可以在另一台机器上运行。
您必须手动解析十进制值,或者只是依赖于数据源(您的EXCEL数据)在与运行应用程序的计算机具有相同文化设置的计算机上格式化。
有人猜测为什么值小于12:00
的工作:可能是偶然的。如果您检查06:00
它将0,25
为十进制并转换为25
,这是完全正常的(好吧,它不会抛出异常)。
请不要忘记:这只是猜测,因为我们还没有看到所有相关信息。
答案 1 :(得分:1)
Its probably a problem with the culture and the decimal point.
使用此选项将单元格值转换为'。'作为小数点:
Double.Parse(cellValue, CultureInfo.InvariantCulture);