写入excel工作簿时为空指针exception

Exception in thread "main" java.lang.NullPointerException at add.copy(add.java:69) at add.main(add.java:33) 

嗨,大家好,这是我所问的第一个问题,所以我很抱歉,如果我做错了。 我目前正在制作一个程序,需要读取一个Excel工作表,并将其添加到已经包含一张工作表的Excel工作簿。 由于堆大小错误,我正在分段读写。 我目前可以读取和写入每个部分,直到最后一节。 当它试图做最后一节我得到上面的错误。

 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class add { public static void main(String[] args) throws IOException { XSSFSheet sheet1=get(); int fRow = 0; int lRow = 0; int rownum = 0; int addon = 0; int num = 0; int numi = 100/20; num = numi + numi; fRow = sheet1.getFirstRowNum(); lRow = 553; copy(fRow,lRow,sheet1); System.out.println("5%"); rownum = 129000; addon = rownum/20; for(int i=0;i<20;i++){ System.out.println(num + "%"); fRow = lRow; lRow = lRow + addon; copy(fRow,lRow,sheet1); num = num + numi; } //System.out.println("100%"); } public static void copy(int fRow, int lRow, XSSFSheet sheet1) throws IOException{ File excel2 = new File ("C:/Users/Colm/Documents/windmill_proj/excels/testing.xlsx"); FileInputStream bis = new FileInputStream(excel2); XSSFWorkbook workbook = null; workbook = new XSSFWorkbook(bis); XSSFSheet mySheet = null; XSSFRow row1 = null; XSSFRow row2 = null; XSSFCell cell2 = null; XSSFCell cell1 = null; int fCell = 0; int lCell = 0; String sheetname1 = sheet1.getSheetName(); int sindex = workbook.getSheetIndex(sheetname1); if(sindex==-1){ mySheet = workbook.createSheet(sheet1.getSheetName()); System.out.println("sheet made"); } else{ mySheet = workbook.getSheetAt(1); } for (int iRow = fRow; iRow <= lRow; iRow++) { row1 = sheet1.getRow(iRow); row2 = mySheet.createRow(iRow); fCell = row1.getFirstCellNum(); lCell = row1.getLastCellNum(); for (int iCell = fCell; iCell < lCell; iCell++) { cell2 = row1.getCell(iCell); cell1 = row2.createCell(iCell); cell1.setCellType(cell2.getCellType()); // Set the cell data value switch (cell2.getCellType()) { case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_BLANK: cell1.setCellValue(cell2.getStringCellValue()); break; case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_BOOLEAN: cell1.setCellValue(cell2.getBooleanCellValue()); break; case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_ERROR: cell1.setCellErrorValue(cell2.getErrorCellValue()); break; case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_FORMULA: cell1.setCellFormula(cell2.getCellFormula()); break; case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_NUMERIC: cell1.setCellValue(cell2.getNumericCellValue()); break; case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING: cell1.setCellValue(cell2.getRichStringCellValue()); break; } } } FileOutputStream out = new FileOutputStream("C:/Users/Colm/Documents/windmill_proj/excels/testing.xlsx"); workbook.write(out); out.flush(); out.close(); workbook.close(); bis.close(); } public static XSSFSheet get() throws IOException{ File fn = new File ("C:/Users/Colm/Documents/windmill_proj/excels/testing2.xlsx"); FileInputStream biss = new FileInputStream(fn); XSSFWorkbook workbook = null; workbook = new XSSFWorkbook(biss); biss.close(); XSSFWorkbook myWorkBook = new XSSFWorkbook(); XSSFSheet sheet = null; XSSFRow row = null; XSSFCell cell = null; XSSFSheet mySheet = null; XSSFRow myRow = null; XSSFCell myCell = null; int sheets = 1; int fCell = 0; int lCell = 0; int fRow = 0; int lRow = 0; for (int iSheet = 0; iSheet < sheets; iSheet++) { sheet = workbook.getSheetAt(iSheet); if (sheet != null) { mySheet = myWorkBook.createSheet(sheet.getSheetName()); fRow = sheet.getFirstRowNum(); lRow = sheet.getLastRowNum(); for (int iRow = fRow; iRow <= lRow; iRow++) { row = sheet.getRow(iRow); myRow = mySheet.createRow(iRow); if (row != null) { fCell = row.getFirstCellNum(); lCell = row.getLastCellNum(); for (int iCell = fCell; iCell < lCell; iCell++) { cell = row.getCell(iCell); myCell = myRow.createCell(iCell); if (cell != null) { myCell.setCellType(cell.getCellType()); switch (cell.getCellType()) { case XSSFCell.CELL_TYPE_BLANK: myCell.setCellValue(""); break; case XSSFCell.CELL_TYPE_BOOLEAN: myCell.setCellValue(cell.getBooleanCellValue()); break; case XSSFCell.CELL_TYPE_ERROR: myCell.setCellErrorValue(cell.getErrorCellValue()); break; case XSSFCell.CELL_TYPE_FORMULA: myCell.setCellFormula(cell.getCellFormula()); break; case XSSFCell.CELL_TYPE_NUMERIC: myCell.setCellValue(cell.getNumericCellValue()); break; case XSSFCell.CELL_TYPE_STRING: myCell.setCellValue(cell.getStringCellValue()); break; default: myCell.setCellFormula(cell.getCellFormula()); } } } } } } } myWorkBook.close(); workbook.close(); System.out.println("done"); return mySheet; } } 

如果有人可以提出什么可能是问题,或者我可以testing什么方式来find问题,我将非常感激。 谢谢!