Java 使用Apache POI在XLSM文件之间复制单元格值
我有两个Java 使用Apache POI在XLSM文件之间复制单元格值,java,excel,apache-poi,xssf,Java,Excel,Apache Poi,Xssf,我有两个XLSM文件,并尝试使用apachepoi在Java代码中的文件之间复制单元格值。 第一个文件初始化如下: File file = new File(GlobalVariables.XLSM); FileInputStream inputStream = new FileInputStream(file); XSSFWorkbook workbook = XSSFWorkbookFactory.createWorkbook(inputStream); XSSFSheet sheet =
XLSM
文件,并尝试使用apachepoi
在Java代码中的文件之间复制单元格值。
第一个文件初始化如下:
File file = new File(GlobalVariables.XLSM);
FileInputStream inputStream = new FileInputStream(file);
XSSFWorkbook workbook = XSSFWorkbookFactory.createWorkbook(inputStream);
XSSFSheet sheet = workbook.getSheetAt(0);
XSSFRow row = sheet.getRow(recordcount+4);
Cell cell;
第二个文件:
File prevfile = new File(PrevResXLS);
FileInputStream prevInputStream = new FileInputStream(prevfile);
XSSFWorkbook prevworkbook = XSSFWorkbookFactory.createWorkbook(prevInputStream);
XSSFSheet prevsheet = prevworkbook.getSheetAt(0);
XSSFRow prevrow = prevsheet.getRow(0);
Cell prevCell;
之后,我尝试按预定义的条件复制单元格。单元格应该复制到与原始文件不同的列中,因此我在代码中使用减法
for (Row r : prevsheet) {
if (r.getRowNum()==0) continue;
if(r.getCell(1).toString().equals(trans_filename)){
prevCell = prevrow.getCell(21);
prevCell.setCellValue(r.getCell(21-13).toString());
prevCell = prevrow.getCell(22);
prevCell.setCellValue(r.getCell(22-13).toString());
prevCell = prevrow.getCell(23);
prevCell.setCellValue(r.getCell(23-13).toString());
prevCell = prevrow.getCell(24);
prevCell.setCellValue(r.getCell(24-13).toString());
prevCell = prevrow.getCell(25);
prevCell.setCellValue(r.getCell(25-13).toString());
prevCell = prevrow.getCell(26);
prevCell.setCellValue(r.getCell(26-13).toString());
prevCell = prevrow.getCell(27);
prevCell.setCellValue(r.getCell(27-13).toString());
prevCell = prevrow.getCell(28);
prevCell.setCellValue(r.getCell(28-13).toString());
prevCell = prevrow.getCell(29);
prevCell.setCellValue(r.getCell(29-13).toString());
prevCell = prevrow.getCell(30);
prevCell.setCellValue(r.getCell(30-13).toString());
prevCell = prevrow.getCell(31);
prevCell.setCellValue(r.getCell(31-13).toString());
prevCell = prevrow.getCell(32);
prevCell.setCellValue(r.getCell(32-13).toString());
prevCell = prevrow.getCell(33);
prevCell.setCellValue(r.getCell(33-13).toString());
}
}
我得到了
java.lang.NullPointerException
,但是文件、工作表和单元格都存在。哪一行给出了NPE?这对应于什么对象?@Gagravarr:在这一行:prevCell.setCellValue(r.getCell(27-13).toString())
,它是单元格接口。prevrow.getCell
以及r.getCell
可能返回null。所以空检查总是必要的。