我们使用EPPlus库读取Excel电子表格并获取各种单元格值。
可能出现的一个问题是某些单元格值是“数字存储为文本”。我们可以要求用户尝试不使用带有此警告的电子表格,但如果我可以在不严重污染我的代码的情况下,我想在我的最终处理它。
当读取带有“以文本存储的数字”的单元格值时,我们会看到以下内容:
int foo = ws.Cells[row, column].GetValue<int>(); // foo comes out as 0
string bar = Convert.ToString(ws.Cells[row, column].Value); // bar comes out as "7"
理想情况下,我想要一种正确读取所有值的方法,而无需为电子表格中的每个单元格解析字符串。
答案 0 :(得分:4)
我不会将此标记为已接受,因为它实际上并未回答我的问题,因此如果有人确定如何检测&#34;存储为文本的数字&#34;那么请回答,我会接受你。
最后,我用方法调用替换了.GetValue<int>()
等。您甚至可以根据您的目的将其转换为扩展方法,以提高可读性。
方法如下:
private int GetInt(object value)
{
if (value == null)
{
return 0;
}
else if (value is double)
{
return Convert.ToInt32(value);
}
else if (value is string)
{
var intValue = 0;
Int32.TryParse((string)value, out intValue);
return intValue;
}
else
{
throw new Exception("Unexpected value type.");
}
}
我称之为:
int foo = GetInt(ws.Cells[row, column].Value); // foo comes out as 7