无法从excel文件中读取空单元格

时间:2016-05-11 11:47:43

标签: c# excel

有一个像这样的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行。

2 个答案:

答案 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

相关问题