我正在使用xlsx
lib和NPOI
lib读取C#
文件。我需要提取一些excel列,并将提取的值保存到某种数据结构中。
我可以成功读取文件,并使用以下代码从第二个(第一个仅包含 header )到最后一行获取所有值:
...
workbook = new XSSFWorkbook(fs);
sheet = (XSSFSheet)workbook.GetSheetAt(0);
....
int rowIndex = 1; //--- SKIP FIRST ROW (index == 0) AS IT CONTAINS TEXT HEADERS
while (sheet.GetRow(rowIndex) != null) {
for (int i = 0; i < this.columns.Count; i++){
int colIndex = this.columns[i].colIndex;
ICell cell = sheet.GetRow(rowIndex).GetCell(colIndex);
cell.SetCellType(CellType.String);
String cellValue = cell.StringCellValue;
this.columns[i].values.Add(cellValue); //--- Here I'm adding the value to a custom data structure
}
rowIndex++;
}
我现在想做的是检查excel文件是否为空或只有1行,以便正确处理该问题并显示消息
如果我对只有1行(标题)的excel文件运行代码,则会中断
cell.SetCellType(CellType.String); //--- here cell is null
出现以下错误:
Object reference not set to an instance of an object.
我也试图用
sheet.LastRowNum
但它不会返回正确的行数。例如,我创建了一个具有5行(1xHEADER + 4xDATA)的excel,该代码成功读取了excel值。在相同的excel上,我删除了4个数据行,然后再次启动excel文件上的代码。
sheet.LastRowNum
不断返回4
作为结果,而不是1
...。我认为这与绑定(bind)到手动清理工作表单元格的某些属性有关。您是否有解决此问题的提示?
最佳答案
我简化了吗?
bool hasContent = false;
while (sheet.GetRow(rowIndex) != null)
{
var row = rows.Current as XSSFRow;
//all cells are empty, so is a 'blank row'
if (row.Cells.All(d => d.CellType == CellType.Blank)) continue;
hasContent = true;
}
关于c# - NPOI-获取Excel行计数以检查其是否为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31344841/