Row Row = sheet. getrow (rowNumber)返回java.lang.nullpointer异常



编辑:我使用这个代码来读取excel表的行和列。但是用双星标记的行抛出异常(java.lang.)。nullpointer例外)。除此之外,我还想将中间的空列转换为空列。请帮助。

有两个循环,一个用于行,一个用于列,这很明显。既没有读取行,也没有解决空白单元格问题。

public void read(String filePath) throws NullPointerException {
                    try {
                    FileInputStream file = new FileInputStream(new File(filePath));
                    System.out.println("going to create Workbook object to read excel row wise");// Create Workbook instance holding reference to .xlsx file
                    XSSFWorkbook workbook = new XSSFWorkbook(file);
                    System.out.println("going to create object sheet to read excel row wise");
                    XSSFSheet sheet = workbook.getSheetAt(0);  //extracts the first sheet of excel
                    System.out.println("Running row iterator to read excel row wise");
                    for (int rowNumber = sheet.getFirstRowNum(); rowNumber <= sheet.getLastRowNum(); rowNumber++) {
                        if (rowNumber == sheet.getFirstRowNum())// this row was skipped as it was header row.
                        {
                        System.out.println("skipping first row");
                        continue;
                        }
                        this.rowconcat = ""; // all values of perticular row will be concatinated in this variable.
                        this.flag = 0;
                        if (sheet.getRow(rowNumber) == null) {
                            System.out.println("row detected null");
                        } else {
                            // The row has data
                            System.out.println("row no inside else==="+rowNumber);
                            **Row row = sheet.getRow(rowNumber);**  //This line here throws null pointer exception.
                        for (int cellNumber = row.getFirstCellNum(); cellNumber <= row.getLastCellNum(); cellNumber++) {
                            Cell cell = row.getCell(cellNumber);
                            if (cell == null || cell.getCellType() == Cell.CELL_TYPE_BLANK) {
                                this.flag = 1; // set to 1 to indicate blank cell but this also doesn't work
                                cell.setCellType(Cell.CELL_TYPE_STRING);
                                cell.setCellValue(" "); //inserting space in cell after converting its type to String.
                                this.rowconcat = this.rowconcat + cell.getStringCellValue() + "~";
                            } else {
                                cell.setCellType(Cell.CELL_TYPE_STRING);
                                this.rowconcat = this.rowconcat + cell.getStringCellValue() + "~";
                                }
                            }
                        }
                    }
                }//try block closure
               catch(Exception e){
               //autogenerated
                }
            } // function closure

我推荐JXL库比apache1更好,我已经使用它很长时间了。它唯一的小问题是它只适用于xls而不是xlsx(如果到现在还没有更新的话!)。

有一个小的例子:

File xlsFile;
public void manageData ()
{
        Workbook w;
        try {
            w = Workbook.getWorkbook(xlsFile);
            // Get the first sheet
            Sheet sheet = w.getSheet(0);
            int j = 1;
            //Begin from the second row
            while (j < sheet.getColumns()) {
                //staff
                Cell infoCell = sheet.getCell(j, 4);
                System.out.println(infoCell.getContents());
            }
        catch (Exception e)
        {
        }
}

最新更新