0

Написал код для записи из одного excel файла в другой. Выдает ошибку: "Exception in thread "main" java.lang.NullPointerException at Try5.Main5.main(Main5.java:30)"

Не могу понять причину. Вот код:

package Try5;

import java.io.IOException; import java.io.; import org.apache.poi.ss.usermodel.; import org.apache.poi.xssf.usermodel.*;

public class Main5 { public static void main (String [] args) throws IOException {

    FileInputStream fis1 = new FileInputStream("C:\\Users\\egorovvv\\Documents\\IntelIJ IDEA\\Projects\\Work Excel 2\\Excel1.xlsx");
    FileOutputStream fos3 = new FileOutputStream("C:\\Users\\egorovvv\\Documents\\IntelIJ IDEA\\Projects\\Work Excel 2\\Excel3.xlsx");
    Workbook book1 = new XSSFWorkbook(fis1);
    Workbook book3 = new XSSFWorkbook();
    String value;
    int bookSN = book1.getNumberOfSheets(); //bookSheetsNumber
    for (int i = 0; i <= bookSN; i++) {
        Sheet book1S = book1.getSheetAt(i);
        int book1RN = book1S.getLastRowNum(); //book1RowsNumber
        Sheet book3S = book3.createSheet(book1.getSheetName(i));
        for (int j = 0; j <= book1RN; j++) {
            Row book1R = book1S.getRow(j);
            int book1CN = book1R.getLastCellNum(); //book1CellsNumber
            Row book3R = book3S.createRow(j);
            for (int k = 0; k <= book1CN; k++) {
                Cell book1C = book1R.getCell(k);
                Cell book3C = book3R.createCell(k);
                switch (book1C.getCellType()) {
                    case NUMERIC:
                        value = Integer.toString((int)book1C.getNumericCellValue());
                        book3C.setCellValue(value);
                        break;
                    case STRING:
                        value = book1C.getStringCellValue();
                        book3C.setCellValue(value);
                        break;
                    }
            }
        }
    }
    book3.write(fos3);
    book1.close();
    book3.close();
}

}

Temply
  • 11
  • 2

1 Answers1

1

Исправил условный оператор switch. Теперь все работает. Код ниже:

package Try6;

import java.io.IOException; import java.io.; import org.apache.poi.ss.usermodel.; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.*;

public class Main6 { public static void main (String [] args) throws IOException { FileInputStream fis1 = new FileInputStream("C:\Users\egorovvv\Documents\IntelIJ IDEA\Projects\Work Excel 2\book1.xlsx"); FileOutputStream fos1 = new FileOutputStream("C:\Users\egorovvv\Documents\IntelIJ IDEA\Projects\Work Excel 2\book3.xlsx"); XSSFWorkbook b1 = new XSSFWorkbook(fis1); XSSFWorkbook b3 = new XSSFWorkbook(); int b1SN = b1.getNumberOfSheets(); int b1RN; int b1CN; String valueString = "0"; int valueInt = 0;

    for (int sh = 0; sh < b1SN; sh++) {
        Sheet b1S = b1.getSheetAt(sh);
        Sheet b3S = b3.createSheet(b1S.getSheetName());
        b1RN = b1S.getLastRowNum();

        for (int r = 0; r <= b1RN; r++) {
            Row b1R = b1S.getRow(r);
            Row b3R = b3S.createRow(r);
            b1CN = b1R.getLastCellNum();

            for (int c = 0; c <= b1CN; c++) {
                Cell b1C = b1R.getCell(c);
                Cell b3C = b3R.createCell(c);

                if (b1C != null) {
                    switch (b1C.getCellType()) {
                        case NUMERIC:
                            valueInt = (int) b1C.getNumericCellValue();
                            b3C.setCellValue(valueInt);
                            break;
                        case STRING:
                            valueString = b1C.getStringCellValue();
                            b3C.setCellValue(valueString);
                            break;
                    }
                }

// if (r == 0 && c == 0 || c == 1 || c == 3 || c == 4 || c == 5 || c == 6 || c == 7 || c == 8) { // CellRangeAddress mergeCells = new CellRangeAddress(0,1,0,0); // b3S.addMergedRegion(mergeCells); // } } } } b3.write(fos1); fos1.close(); } }

Temply
  • 11
  • 2