我使用此代码从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中的值显示为###,因为列空间不足以显示数字。当然,当我点击单元格时,我可以在顶部的行中看到正确的值,但在我的程序中,我将###作为值而不是正确的数字。
这里有什么建议吗?
答案 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将返回一个单元格的实际值。文本将返回您在电子表格中实际看到的内容