不能从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个改动:
column1Value = 1; column2Value = AAAA
2次迭代:
column1Value = 2; column2Value = EEEE
3游戏:
column1Value = 3; column2Value = CCCC
为什么代码在第二行和第二列的第二次迭代中没有得到空值? 以同样的方式4和5行。
我会感兴趣的是,如果你一次读完整个单元格块,会发生什么情况:
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插件应用程序中使用这样的代码来cachingExcel工作表中的所有数据。
尝试使用Range
(从确切的细胞到确切的细胞数量),而不是UsedRange
。
- Gembox电子表格C#:这是一种方法来检测一个单元格是否有边界?
- Interop.Excel本地化和Range.Formula与Formulalocal
- Excel / Visual Studio / C#。 如何更改单元格的显示名称,但保留公式
- System.Runtime.InteropServices.COMException(0x800706BE):远程过程调用失败
- 如何使用C#/ FileHelpers ExcelNPOIStorage从Excel文件中提取数据
- 使用后期绑定在C#中获取特定的Excel实例
- 非连续行的Excel范围到剪贴板
- 在C#中使用OleDbConnection读取xlsx文件会引发错误
- 隐藏打开的Excel文件