C# 从 Excel 文件读取数据的结果是 ###

本文关键字:结果是 数据 读取 Excel 文件 | 更新日期: 2023-09-27 18:32:07

我用这段代码从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 中,当我单击单元格时,我可以在顶部的行中看到正确的值,但在我的程序中,我得到的是 ### 作为值而不是正确的数字。

这里有什么建议吗?

C# 从 Excel 文件读取数据的结果是 ###

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

所以而不是

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

你会写

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

我见过许多使用属性 Value OR Value2 读取范围的示例。
你能试试这个吗?

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

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

2
使用 (

string) (range.单元格[rCnt, cCnt] 作为范围)。值作为值将返回单元格的实际值。文本将返回您在电子表格上实际看到的内容