使用反射,在Excel导入时判断是否有空行

在用POI进行Excel导入时,发觉有这种情况。

当某一行有格式的时候,POI会认为这行有数据。

用反射的方法可以排除这种数据。

	public static boolean isBlankObject(Object model) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
		Field[] field = model.getClass().getDeclaredFields();        //获取实体类的所有属性,返回Field数组  
        for(int j=0 ; j<field.length ; j++){     //遍历所有属性
            String name = field[j].getName();    //获取属性的名字
            
            //System.out.println("attribute name:"+name);     
            name = name.substring(0,1).toUpperCase()+name.substring(1); //将属性的首字符大写,方便构造get,set方法
            //String type = field[j].getGenericType().toString();    //获取属性的类型
            Method m = model.getClass().getMethod("get"+name);
            if(!StringUtils.isBlank((String)m.invoke(model))){
                return false;
            }             
        }
		
		return true;
	}

调用这个方法,可以将空白行去掉:

			Iterator<excelLine> it = excelList.iterator();//excelList是List<excelLine>类型的Excel数据,excelLine是行的数据类型
		    while (it.hasNext()) {
		    	if (isBlankObject(it.next())){
		    		it.remove();  
		    	}
		    }



  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用NPOI库中的ISheet类中的LastRowNum属性获取Excel文件中行数。示例代码如下: ``` using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { IWorkbook workbook = new HSSFWorkbook(fs); ISheet sheet = workbook.GetSheetAt(0); int rowCount = sheet.LastRowNum; } ``` 可以使用IRow类中的LastCellNum属性获取每行的列数。示例代码如下: ``` using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { IWorkbook workbook = new HSSFWorkbook(fs); ISheet sheet = workbook.GetSheetAt(0); for (int i = 0; i <= sheet.LastRowNum; i++) { IRow row = sheet.GetRow(i); int cellCount = row.LastCellNum; } } ``` 如果要判断某一行是否为空行,可以在遍历每行的判断该行是否为null或者FirstCellNum属性值是否等于-1。 ``` using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { IWorkbook workbook = new HSSFWorkbook(fs); ISheet sheet = workbook.GetSheetAt(0); for (int i = 0; i <= sheet.LastRowNum; i++) { IRow row = sheet.GetRow(i); if(row==null || row.FirstCellNum==-1) { // Empty row } } } ``` 如果需要判断整个表格是否都是空行,可以在上面的代码基础上再加上计数器,计算非空行的数量,如果为0,就说明整个表格都是空行. ### 回答2: 使用NPOI导入Excel文件后,可以通过以下步骤获取Excel的行数和列数,并判断是否空行: 1. 首先,使用NPOI打开Excel文件。可以通过HSSFWorkbook类打开一个xls格式的文件,或通过XSSFWorkbook类打开一个xlsx格式的文件。 ```csharp FileStream fileStream = new FileStream("Excel文件路径", FileMode.Open); HSSFWorkbook workbook = new HSSFWorkbook(fileStream); // xls格式 // 或 XSSFWorkbook workbook = new XSSFWorkbook(fileStream); // xlsx格式 ``` 2. 获取Excel文件的第一个工作表(Sheet),并获取该工作表的数据区域范围。 ```csharp ISheet sheet = workbook.GetSheetAt(0); // 获取第一个工作表 CellRangeAddress region = sheet.GetCellRangeAddress(0, sheet.LastRowNum); // 获取数据区域范围 ``` 3. 获取数据区域的行数和列数。 ```csharp int rowCount = region.LastRow - region.FirstRow + 1; // 获取行数 int columnCount = region.LastColumn - region.FirstColumn + 1; // 获取列数 ``` 4. 使用循环遍历每一行,判断是否空行。 ```csharp for (int i = region.FirstRow; i <= region.LastRow; i++) { IRow row = sheet.GetRow(i); // 获取当前行 bool isRowEmpty = true; // 假设当前行为空行 for (int j = region.FirstColumn; j <= region.LastColumn; j++) { ICell cell = row.GetCell(j); // 获取当前单元格 if (cell != null && cell.CellType != CellType.Blank) // 判断单元格是否为空 { isRowEmpty = false; // 如果当前行存在非空的单元格,则当前行不为空行 break; } } if (isRowEmpty) { // 当前行为空行,进行相应处理 } } ``` 通过以上步骤,我们可以使用NPOI导入Excel文件,并获取Excel的行数和列数。同,我们也可以通过循环遍历每一行,并判断是否空行。如需详细了解NPOI的用法,请参考NPOI的官方文档或其他相关教程。 ### 回答3: 使用NPOI库来导入Excel文件并获取行数和列数。可以通过以下步骤实现: 1. 首先,需要加载Excel文件并创建工作簿和工作表对象。可以使用HSSFWorkbook类加载Excel文件。 2. 使用GetSheetAt方法获取特定位置的工作表对象。例如:HSSFSheet sheet = workbook.GetSheetAt(0)。这里假设想获取第一个工作表。 3. 使用sheet.LastRowNum属性来获取Excel文件的行数。LastRowNum属性返回最后一行的索引值,因此需要将其加1以获取实际行数。 4. 使用GetRow方法获取特定位置的行对象。例如:HSSFRow row = sheet.GetRow(0)。这里假设想获取第一行。 5. 使用row.LastCellNum属性来获取行的列数。LastCellNum属性返回最后一个单元格的索引值,因此需要将其加1以获取实际列数。 6. 使用row.Cells属性获取行中的所有单元格对象,并遍历它们进行判断。如果单元格对象为空,则该行为空行。 以下是通过NPOI导入Excel文件并获取行数和列数的示例代码: ```csharp using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; ... string filePath = "路径/文件名.xls"; using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { IWorkbook workbook = new HSSFWorkbook(file); ISheet sheet = workbook.GetSheetAt(0); int rowCount = sheet.LastRowNum + 1; int columnCount = 0; for (int i = 0; i < rowCount; i++) { IRow row = sheet.GetRow(i); // 判断行是否为空行 bool isEmptyRow = true; if (row != null) { columnCount = Math.Max(columnCount, row.LastCellNum); foreach (ICell cell in row.Cells) { if (cell.CellType != CellType.Blank) { isEmptyRow = false; break; } } } if (!isEmptyRow) { // 处理非空行数据 // ... } } Console.WriteLine("行数:" + rowCount); Console.WriteLine("列数:" + columnCount); } ``` 在上面的示例中,导入Excel文件路径为"路径/文件名.xls",可以根据实际情况修改。处理非空行数据的部分需要根据具体需求进行编写。输出行数和列数的部分使用了Console.WriteLine方法,可以根据需要进行修改或更改为其他处理方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值