Iterator<Row> rowIterator = sheet.rowIterator()获取迭代器后怎么获取其中的行的对象
时间: 2024-02-19 11:57:36 浏览: 43
可以使用 while 循环和 hasNext() 方法来遍历迭代器中的每一行数据,然后通过 next() 方法获取每一行的对象。示例如下:
```
Iterator<Row> rowIterator = sheet.rowIterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
// 对 row 进行操作,比如获取单元格数据
}
```
在循环中,通过调用 `rowIterator.hasNext()` 方法来判断是否还有下一行数据,如果有就调用 `rowIterator.next()` 方法获取下一行的对象,将其赋值给 `Row` 类型的变量 `row`,然后就可以对 `row` 进行操作,比如获取单元格数据。
相关问题
Iterator<Row> rowIterator = sheet.rowIterator();//返回物理行的迭代器 for (Iterator<Row> it = rowIterator; it.hasNext(); ) { Row row = it.next(); }
这段代码和前面的示例是等价的,都是通过获取 `Iterator<Row>` 对象来遍历 Excel 表格中的每一行数据。在这段代码中,我们使用普通for循环来遍历迭代器中的每一行数据,与使用while循环和hasNext()方法的效果是一样的。具体来说,代码中的 `for` 循环中初始化语句和循环条件保持为空,而在循环体中通过 `Iterator` 的 `next()` 方法获取下一行的数据,将其赋值给 `Row` 类型的变量 `row`,然后就可以对 `row` 进行操作,比如获取单元格数据。
private static List<ImportViewModel> readExcelFile() { List<ImportViewModel> datas = new ArrayList<>(); FileInputStream inputStream = null; Workbook workbook = null; try { inputStream = new FileInputStream("/sdcard/Template/IC1001.xlsx"); workbook = WorkbookFactory.create(inputStream); Sheet sheet = workbook.getSheetAt(0); Iterator<Row> rowIterator = sheet.rowIterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); ImportViewModel importViewModel = new ImportViewModel(); Iterator<Cell> columnIterator = row.cellIterator(); while (columnIterator.hasNext()) { Cell cell= columnIterator.next(); importViewModel.setName("商品名称:" + columnIterator.next().getStringCellValue()); importViewModel.setType("商品类型:" + columnIterator.next().getStringCellValue()); importViewModel.setStyle("商品款式:" + columnIterator.next().getStringCellValue()); importViewModel.setInventoryNum("预期应有库存:" + columnIterator.next().getStringCellValue()); datas.add(importViewModel); } } } catch (IOException | InvalidFormatException e) { e.printStackTrace(); } finally { try { if (workbook != null) { workbook.close(); } if (inputStream != null) { inputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } return datas; }java.util.NoSuchElementException怎么修改
java.util.NoSuchElementException异常通常发生在当你试图访问一个没有下一个元素的迭代器时。在你的代码中,这可能是因为你每次迭代器循环时都调用了两次`columnIterator.next()`方法,而在某些情况下,这会导致迭代器尝试读取不存在的下一个元素。要修复这个问题,你可以将两个方法调用合并为一个方法调用,如下所示:
```
while (columnIterator.hasNext()) {
Cell cell = columnIterator.next();
importViewModel.setName("商品名称:" + cell.getStringCellValue());
importViewModel.setType("商品类型:" + cell.getStringCellValue());
importViewModel.setStyle("商品款式:" + cell.getStringCellValue());
importViewModel.setInventoryNum("预期应有库存:" + cell.getStringCellValue());
datas.add(importViewModel);
}
```
这样,每次迭代时只会调用一次`columnIterator.next()`方法,从而避免了可能导致`NoSuchElementException`异常的问题。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)