如何遍历excel文件中的所有行和单元格

use*_*485 10 java apache-poi

我想使用foreach迭代我的excel文件中的所有单元格,以便设置单个前景色.这就是我到目前为止所拥有的.

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Sheet1");
sheet = wb.getSheetAt(0);

for (HSSFRow myrow : sheet){
    for (HSSFCell mycell : myrow){
        //set foreground color here
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,对于报表for (HSSFRow myrow : sheet)for (HSSFCell mycell : myrow)我得到:

只能遍历数组或实例 java.lang.Iterable

我检查HSSFSheetHSSFRow-它们实现java.lang.Iterable(Row)java.lang.Iterable(Cell)分别.

oma*_*llo 23

试试这个.编译好了

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Sheet1");
sheet = wb.getSheetAt(0);

for (Row myrow : sheet) {
    for (Cell mycell : myrow) {
        //set foreground color here
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用POI 3.7稳定

  • 对于上面的编译,你需要常规的`org.apache.poi.ss.usermodel.Cell`和`org.apache.poi.ss.usermodel.Row` (3认同)
  • 是的,这是你的问题.上面的示例适用于3.7,您正在阅读的文档最有可能是3.7 (2认同)

sno*_*lli 6

请考虑使用流进行更具声明性的样式迭代:

Workbook wb = WorkbookFactory.create(new FileInputStream("filename.xlsx"));    
Sheet sheet = wb.getSheetAt(0);

StreamSupport.stream(sheet.spliterator(), false)
         .filter(...)
         .map(...)
         .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)