我正在尝试创建一个可以读取.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);
}
我知道这很糟糕,但也许它可以帮助你理解我想要做的事情。 任何帮助都是极好的。谢谢!
答案 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!