行row = sheet.getRow(rowNumber)返回java.lang.nullpointer异常,即使Excel表中存在行也是如此。我正在使用Apache POI

时间:2016-11-09 09:55:12

标签: java excel apache-poi

编辑:我正在使用此代码读取Excel工作表的行和列。但标有双星的行抛出异常(java.lang.nullpointer异常)。除此之外我还想转换中找到的空列空白列之间。请帮助。

有两个循环,一个用于行,另一个用于列用于显示。 Niehter行正在读取,空白单元格问题也正在解决。

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

1 个答案:

答案 0 :(得分:-1)

我推荐JXL库更好的appache one,我已经使用了sinc拉伸时间。它唯一的小问题是它只适用于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)
        {
        }
}