【问题标题】:Reading from a Excel Cell从 Excel 单元格中读取
【发布时间】:2017-02-02 20:49:16
【问题描述】:

我正在使用 EPPlus 包从 .xlsx 文件中读取。我需要从单元格中读取 TimeSpan 对象。 excel 单元格将包含“hh:mm”格式的数据,例如:“09:00”或“18:30”,不带引号。

这是我的代码:

string myString = workSheet.Cells[1,1].Value.ToString();
double d = double.Parse(myString);
DateTime dt = DateTime.FromOADate(d);
TimeSpan ts = new TimeSpan(dt.Hour, dt.Minute, dt.Second);

对于excel文件中的“09:00”或“08:30”数据,myString分别包含“0.375”或“0.3541666666666667”,可以按预期计算ts。 但是对于 excel 文件中的“10:00”,myString 包含 “30/12/1899 10:00:00 AM”并且双精度值的解析失败,因此无法计算 ts。

我不确定为什么这种情况不一致。如何始终从 excel 单元格(更准确地说是具有通用格式的单元格)中读取双精度值?请帮忙。

这是我的简化代码(根据 Siddharth Rout 的建议):

string myString = workSheet.Cells[1,1].Text.ToString();
TimeSpan ts = TimeSpan.Parse(myString);

到目前为止,它正在使用各种值。

【问题讨论】:

  • A Shot in the dark : ?Format("09:00", "0.000000000000") in VBA 给出0.375000000000 同样?Format("08:30", "0.000000000000") 给出0.354166666667?Format("10:00", "0.000000000000") 给出0.416666666667 所以如果我们能得到“10:00”从牢房出来,然后我们就在游戏中......好吧,看看string myString = workSheet.Cells[1,1].Text.ToString();给你什么?
  • 太棒了!字符串 myString = workSheet.Cells[1,1].Text.ToString();正在给出所需的双精度值。需要彻底检查。非常感谢。
  • @SiddharthRout 应该将此添加为答案,Choudhury 应该接受它。

标签: excel epplus


【解决方案1】:

这是我的简化代码(根据 Siddharth Rout 的建议):

string myString = String.Format("{0}", workSheet.Cells[1,1].Text);
TimeSpan ts = TimeSpan.Parse(myString);

到目前为止,它正在使用各种值。

【讨论】:

  • ToString() 通常不是“最佳”实践,因为它会抛出空值异常。 String.Format("{0}", worksheet.Cells[1,1].Text) 是正确的语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多