从Excel单元格中读取数据

5

我正在使用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.354166666666667”,因此可以按预期计算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);

到目前为止,它可以处理各种值。


1
一次尝试:在VBA中使用?Format("09:00", "0.000000000000")会得到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();会给你什么? - Siddharth Rout
太好了!string myString = workSheet.Cells[1,1].Text.ToString(); 给出了期望的双精度值。需要仔细检查。非常感谢。 - Choudhury
@SiddharthRout 应该将此作为答案添加,并且 Choudhury 应该接受它。 - Kristopher
1个回答

7

以下是我简化的代码(在Siddharth Rout的建议下):

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

到目前为止,它可以使用各种值。


1
ToString()通常不是“最佳”实践,因为它会对空值抛出异常。在这里,String.Format("{0}", worksheet.Cells[1,1].Text)是正确的语法。 - pim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接