我们使用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"

理想情况下,我希望有一种方法可以正确读取所有值,而不必为电子表格中的每个单元格解析字符串。

最佳答案

我不会把这个标记为接受,因为它实际上并没有回答我的问题,所以如果有人真的知道如何检测“作为文本存储的数字”,那么请回答,我会接受你的。
最后,我用方法调用替换了.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

关于c# - EPPlus:检测并处理“数字存储为文本”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28686366/

10-10 13:36