【问题标题】:C# changing variable type dynamically while saving in excel fileC#动态更改变量类型,同时保存在excel文件中
【发布时间】:2017-08-04 21:04:00
【问题描述】:

我使用 excel 库将 Dictionary<string, List<string>> 转换为 excel 文件。字典中的值保存为字符串,但它们实际上可以是双精度数或字符串。假设 myDic 是一个示例字典。例如 myDic[0]:

[0] "\"Nm\""string
[1] "1,0"   string
[2] "2,0"   string
[3] "3,2"   string
[4] "0,0"   string
[5] "0,0"   string
[6] "0,0"   string
[7] "0,0"   string
[8] "0,0"   string
[9] "0,0"   string
[10]    "0,0"   string

在将其保存到 excel 时,如果它们实际上是数字,我想将它们转换为数字。 我使用了这种方法,但似乎大错特错:

try
{
    row.CreateCell(j).SetCellValue(Double.Parse(cellValue));
}
catch (Exception e)
{
    row.CreateCell(j).SetCellValue(cellValue);
}

这非常慢,因为它会在大多数单元格上引发异常。此外,双精度值设置错误,我认为这是因为我的数字(德国数字)中有逗号,例如 1,0 保存为 10。

所以似乎有两个问题。第一:如何动态正确地转换单元格值的类型。第二:如何正确保存带逗号的数字。

有人可以帮忙吗。

【问题讨论】:

  • Faster 是使用TryParse
  • 看来 double.Parse 会抛出一个FormatException。试试这个代码:double.Parse(cellValue, System.Globalization.CultureInfo.InvariantCulture)

标签: c# excel type-conversion


【解决方案1】:

要测试字符串是否可以转换为双精度,请使用Double.TryParse:

double d;
if(Double.TryParse(cellValue, out d))
    row.CreateCell(j).SetCellValue(d);
else
    row.CreateCell(j).SetCellValue(cellValue);

这样当解析失败时你不会得到异常。而TryParse 只是返回false 让你跳到else-branch。

要正确处理逗号和指向,您可以使用TryParse 的重载来了解文化:

Double.TryParse(cellValue, NumberStyles.Any, new CultureInfo("de-DE"), out d)

【讨论】:

  • 您的CultureInfo 不正确,它将忽略逗号而不是将其视为小数点。您可以使用不同的 CultureInfo 来理解逗号,例如 new CultureInfo("de-DE"),因为 OP 提到了德国数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多