【问题标题】:ExcelDataReader does not read floats with comma like "123,45" (instead reads "123.45")ExcelDataReader 不读取带有逗号的浮点数,例如“123,45”(而是读取“123.45”)
【发布时间】:2020-01-21 05:41:37
【问题描述】:

如何读取带有逗号的浮点值,例如123,45

我必须阅读格式为 123,45 的第三方 excel 文件,我不能/不允许将它们重新格式化为 123.45

我现在正在使用这种方法:

    string GetCell(int row, int col)
    {
        if (Sheet != null)
        {
            try
            {
                string cellContent = Sheet[row][col].ToString(); // careful "ToString()" syntax!
                //Print("Excel.Get({0},{1}): {2}", row, col, cellContent);
                return cellContent;
            }
            catch (Exception e)
            {
                Print("Excel.Get("+row+","+col+") error: "+ e.Message);
                return null;
            }
        }
        else
        {
            Print("Excel.Get("+ row + ","+ col+") error: sheet is null");
            return null;
        }
    }

但字符串返回为12345

提前致谢!

【问题讨论】:

  • 您可以将“123,45”读取(解析)为12345123.45...您喜欢哪种方式? (请edit发帖澄清)
  • 通过设置使用逗号作为小数分隔符的文化/区域设置来阅读它们,例如法语/文化。
  • 我仍然没有得到你想要的结果...无论如何@Pac0 说选择一种文化和set it for current thread or whole process。选择将, 视为小数分隔符(以获取123.45)或组分隔符(以获取12345)的文化
  • 是的,为当前线程设置文化,或者使用 float.Parse 和文化参数。

标签: c# exceldatareader


【解决方案1】:

您可以尝试指定一种文化

    string valueRead = "123,45";
    CultureInfo frenchCultureInfo = new CultureInfo("fr-FR");
    float valueParsed = float.Parse(valueRead, frenchCultureInfo);

编辑:根据您的评论,您可以使用 Excel 互操作指定文化。其他选择包括,将值读取为字符串并使用float.Parse,或更改当前线程的文化。

我使用法语是因为逗号是该语言中的小数分隔符,但当然也适用于任何其他语言。

【讨论】:

  • 谢谢!它将CultureInfo frenchCultureInfo = new CultureInfo("fr-FR") 放在我的Excel 课程的开头
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
相关资源
最近更新 更多