4

我使用此代码从 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 中的值显示为 ### 的单元格,因为列空间不够大,无法显示数字。当然,在 excel 中,当我单击单元格时,我可以在顶部的行中看到正确的值,但在我的程序中,我将 ### 作为值而不是正确的数字。

这里有什么建议吗?

4

3 回答 3

4

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

所以而不是

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

你会写

(range.Cells[rCnt, cCnt] as Range).Value;
于 2012-04-25T08:16:42.993 回答
1

我已经看到了许多使用属性 Value OR Value2 读取 Range 的示例。
你能试试这个吗?

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

Value2 属性与 Value 类似,但不能很好地转换 Date 列,因此如果 Excel 文件中有日期列,则最好使用 Value。有关Value 和 Value2 之间差异的文章,请参见此处

于 2012-04-25T08:13:52.917 回答
0

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

于 2012-04-25T08:18:10.650 回答