EPPlus:检测并处理“存储为文本的编号”

我们使用EPPlus库在Excel电子表格中读取并获取各种单元格值。

可能发生的一个问题是,某些单元格值是“以文本forms存储的数字”。 我们可以要求用户尽量不要使用这个警告的电子表格,但是如果没有我的代码太糟糕,我想在我的最后处理它。

当用“存储为文本的数字”读取单元格值时,我们看到以下内容:

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" 

理想情况下,我希望能够正确读取所有值,而不必为电子表格中的每个单元格分析string。

我不打算把这个标记为被接受,因为它实际上并不回答我的问题,所以如果有人确实如何检测“存储为文本的数字”,那么请回答,我会接受你。

最后,我用方法调用replace了.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