EPPlus:检测并处理以文本形式存储的号码"

时间:2015-02-24 00:42:14

标签: c# excel epplus

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

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

1 个答案:

答案 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