Apache Poi - 如何读取xlsx并在不包含任何信息的行上写入?

时间:2015-04-30 11:45:06

标签: java excel apache apache-poi xlsx

我正在尝试创建一个可以读取.xlsx文件并在不包含任何信息的行上写入的应用程序。我尝试过使用类似的东西:

 FileInputStream fileIn = new FileInputStream("workbook.xlsx");
        Workbook wb = new XSSFWorkbook(fileIn);

        Sheet sheet = wb.getSheetAt(0);
        Row row1;
        Cell cell1;
        Cell cell2;
        int incrementator=0;
        for (int i = 0; i < 1000; i++) {
            for (int t = 0; t < 18; t++) {

                cell1=sheet.getRow(i).getCell(t);

                if(cell1==null){

                   cell2 = sheet.createRow(incrementator).createCell(0);
                   cell2.setCellType(Cell.CELL_TYPE_STRING);
                   cell2.setCellValue("Something");
                   System.out.println("Succes");
                }else{

                   incrementator++;
                   System.out.println("Incrementing"+incrementator);
                }

我知道这很糟糕,但也许它可以帮助你理解我想要做的事情。 任何帮助都是极好的。谢谢!

2 个答案:

答案 0 :(得分:0)

试试这个:

FileInputStream fileIn = new FileInputStream("workbook.xlsx");
Workbook wb = new XSSFWorkbook(fileIn);

Sheet sheet = wb.getSheetAt(0);

for (int i = 0; i < sheet.getNumberOfRows(); i++) {

    if(sheet.getRow(i).getPhysicalNumberOfCells() == 0){
        //row is 'empty' : do stuff
    }
}

答案 1 :(得分:0)

如果未使用或设置行,

Sheet.getRow(int)可以返回null。在这种情况下,您需要先创建行才能使用它。所以,你的代码应该是这样的:

Worbook wb = WorkbookFactory.create(new File("workbook.xlsx"));
Sheet sheet = wb.getSheetAt(0);
Row row1 = sheet.getRow(0);
if (row1 == null) {
   // First row hasn't been touched, so create it
   row1 = sheet.createRow(1);
}

Cell cell1;
Cell cell2;
// etc

另外,if you have a file, use the file, don't use an inputstream