C#从excel文件读取数据导致###

时间:2012-04-25 08:04:07

标签: c# .net excel range worksheet

我使用此代码从excel文件中读取数据

        Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
        Microsoft.Office.Interop.Excel.Range range;

        int rCnt = 0;
        int cCnt = 0;
        string[,] data;

        xlWorkSheet = (Worksheet)wb.Worksheets.get_Item(sheetId);

        range = xlWorkSheet.UsedRange;

        data = new string[range.Rows.Count, range.Columns.Count];

        for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
        {
            for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
            {          
                data[rCnt - 1, cCnt - 1] = (string)
                (range.Cells[rCnt, cCnt] as Range).Text;
            }
        }

现在我有时会进入单元格,其中excel中的值显示为###,因为列空间不足以显示数字。当然,当我点击单元格时,我可以在顶部的行中看到正确的值,但在我的程序中,我将###作为值而不是正确的数字。

这里有什么建议吗?

3 个答案:

答案 0 :(得分:4)

尝试使用Range.Value属性而不是Text

所以而不是

(range.Cells[rCnt, cCnt] as Range).Text;
你会写

(range.Cells[rCnt, cCnt] as Range).Value;

答案 1 :(得分:1)

我见过许多使用属性Value OR Value2读取Range的示例 你能试试吗?

data[rCnt - 1, cCnt - 1] = (string)(range.Cells[rCnt, cCnt] as Range).Value.ToString();

Value2属性与Value类似,但不能很好地翻译Date列,因此如果Excel文件中有日期列,最好使用Value。 See here关于价值与价值2之间差异的文章

答案 2 :(得分:0)

use(string)(range.Cells [rCnt,cCnt] as Range)。ValueValue将返回一个单元格的实际值。文本将返回您在电子表格中实际看到的内容