有一个像这样的excel文件:
1 | AAAA | val1_1
2 | | val1_2
3 | EEEE | val2_1
4 | | val2_2
5 | | val2_3
6 | CCCC | val3_1
有一个代码:
Excel.Application xclApp = new Excel.Application();
Excel.Workbooks xclWorkbooks;
Excel.Workbook xclWorkbook;
Excel.Worksheet xclWorksheet;
Excel.Range xclRange;
xclWorkbooks = xclApp.Workbooks;
string path = "Some path";
xclWorkbook = xclWorkbooks.Open(path);
xclWorksheet = (Excel.Worksheet)xclWorkbook.Worksheet.get_Item(1);
range = xclWorksheet.UsedRange;
string column1Value = "";
string column2Value = "";
for(int i=1; i<=range.Rows.Count; i++)
{
column1Value = Convert.ToString((range.Cells[i, 1] as Excel.Range).Value);
column2Value = Convert.ToString((range.Cells[i, 2] as Excel.Range).Value);
}
1 itteration:
column1Value = 1; column2Value = AAAA
2 itteration:
column1Value = 2; column2Value = EEEE
3 ittertaion:
column1Value = 3; column2Value = CCCC
为什么代码在第二行和第二列的第二次尝试中没有得到空值?以同样的方式4行和5行。
答案 0 :(得分:1)
如果你一次性读完整个细胞块,我会很有兴趣知道会发生什么:
xclWorksheet = (Excel.Worksheet)xclWorkbook.Worksheet.get_Item(1);
// Try adding the following lines... what happens ?
Range entireWorksheet = xclWorksheet.Range["A1", "Z99999"];
object[,] values = (object[,])entireWorksheet.Value2;
int numberOfRows = arr.GetUpperBound(0);
int numberOfColumns = arr.GetUpperBound(1);
这也是从Excel工作表中读取数据的一种更有效的方法,而不是逐个单元地读取数据。
我们在一些C#Excel Addin应用程序中使用这样的代码来缓存Excel工作表中的所有数据。
答案 1 :(得分:0)
尝试使用Range
(从精确的单元格到精确的单元格编号)而不是UsedRange
。