无法调用方法,因为 return 值为空
Cannot invoke method because the return value is null
我正在努力使一些 excel 任务自动化,当 运行 程序时,我偶然发现了这样的错误:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "org.apache.poi.xssf.usermodel.XSSFRow.getCell(int)" because the return value of "org.apache.poi.xssf.usermodel.XSSFSheet.getRow(int)" is null
at com.excel.auto.ExcelAuto.main(ExcelAuto.java:43)
下面是我目前输入的代码:
public class ExcelAuto {
public static void main(String args[]) throws IOException {
// To get File Path
Scanner scannerFilePath = new Scanner(System.in);
System.out.println("Please Enter File Path: ");
String excelFilePath = scannerFilePath.nextLine();
FileInputStream inputStream = new FileInputStream(excelFilePath);
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
// To get Sheet Name
Scanner scannerSheet = new Scanner(System.in);
System.out.println("Please Enter Excel Sheet Name: ");
String excelSheetName = scannerSheet.nextLine();
XSSFSheet sheet = workbook.getSheet(excelSheetName);
// To set matching transactions to yellow background
CellStyle stylePerfectTrades = workbook.createCellStyle();
stylePerfectTrades.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
stylePerfectTrades.setFillPattern(FillPatternType.SOLID_FOREGROUND);
DataFormatter df = new DataFormatter();
for (int i = 0; i < sheet.getLastRowNum() + 1; i++) {
Cell cellTitleWPBO = sheet.getRow(i).getCell(9);
Cell cellAmountWPBO = sheet.getRow(i).getCell(10);
Cell cellCheckStatusWPBO = sheet.getRow(i).getCell(6);
for (int j = 0; j < sheet.getLastRowNum() + 1; j++) {
Cell cellDescriptionSaxo = sheet.getRow(j).getCell(2);
Cell cellNetChangeSaxo = sheet.getRow(j).getCell(3);
Cell cellCheckStatusSaxo = sheet.getRow(j).getCell(5);
if (df.formatCellValue(cellCheckStatusSaxo).contains("-")) {
if (df.formatCellValue(cellDescriptionSaxo).contains(df.formatCellValue(cellTitleWPBO))) {
if (df.formatCellValue(cellNetChangeSaxo).contains(df.formatCellValue(cellAmountWPBO))) {
cellAmountWPBO.setCellStyle(stylePerfectTrades);
cellDescriptionSaxo.setCellStyle(stylePerfectTrades);
cellNetChangeSaxo.setCellStyle(stylePerfectTrades);
cellTitleWPBO.setCellStyle(stylePerfectTrades);
cellCheckStatusSaxo.setCellValue("Checked");
cellCheckStatusWPBO.setCellValue("Checked");
System.out.println("Equals");
break;
}
// Transaction with same title but not same amount.
else {//If cell has a different value as the one in the row below it
System.out.println("Not Equals lah");
}
} else if (df.formatCellValue(cellTitleWPBO).contains("Conversion")) {
if (df.formatCellValue(cellDescriptionSaxo).contains("DEPOSIT")) {
if (df.formatCellValue(cellNetChangeSaxo).contains(df.formatCellValue(cellAmountWPBO))) {
cellAmountWPBO.setCellStyle(stylePerfectTrades);
cellDescriptionSaxo.setCellStyle(stylePerfectTrades);
cellNetChangeSaxo.setCellStyle(stylePerfectTrades);
cellTitleWPBO.setCellStyle(stylePerfectTrades);
cellCheckStatusSaxo.setCellValue("Checked");
cellCheckStatusWPBO.setCellValue("Checked");
System.out.println("Equals (Conversion Deposit)");
break;
} else {
System.out.println("Not Equals Amount(Conversion)");
}
} else if (df.formatCellValue(cellDescriptionSaxo).contains("WITHDRAWAL")) {
if (df.formatCellValue(cellNetChangeSaxo).contains(df.formatCellValue(cellAmountWPBO))) {
cellAmountWPBO.setCellStyle(stylePerfectTrades);
cellDescriptionSaxo.setCellStyle(stylePerfectTrades);
cellNetChangeSaxo.setCellStyle(stylePerfectTrades);
cellTitleWPBO.setCellStyle(stylePerfectTrades);
cellCheckStatusSaxo.setCellValue("Checked");
cellCheckStatusWPBO.setCellValue("Checked");
System.out.println("Equals (Conversion Deposit)");
break;
} else {
System.out.println("Not Equals Amount(Conversion)");
}
} else {
System.out.println("Not Equals (Conversion)");
}
} else if (df.formatCellValue(cellTitleWPBO).contains("stamp duty")) {
if (df.formatCellValue(cellDescriptionSaxo).contains("WITHDRAWAL")) {
if (df.formatCellValue(cellNetChangeSaxo).contains(df.formatCellValue(cellAmountWPBO))) {
cellAmountWPBO.setCellStyle(stylePerfectTrades);
cellDescriptionSaxo.setCellStyle(stylePerfectTrades);
cellNetChangeSaxo.setCellStyle(stylePerfectTrades);
cellTitleWPBO.setCellStyle(stylePerfectTrades);
cellCheckStatusSaxo.setCellValue("Checked");
cellCheckStatusWPBO.setCellValue("Checked");
System.out.println("Equals (stamp duty)");
break;
} else {
System.out.println("Not Equals Amount(stamp duty)");
}
} else {
System.out.println("Not Equals (stamp duty)");
}
} else if (df.formatCellValue(cellTitleWPBO).contains("Dividend")) {
if (df.formatCellValue(cellDescriptionSaxo).contains("Corporate Actions ")) {
if (df.formatCellValue(cellNetChangeSaxo).contains(df.formatCellValue(cellAmountWPBO))) {
cellAmountWPBO.setCellStyle(stylePerfectTrades);
cellDescriptionSaxo.setCellStyle(stylePerfectTrades);
cellNetChangeSaxo.setCellStyle(stylePerfectTrades);
cellTitleWPBO.setCellStyle(stylePerfectTrades);
cellCheckStatusSaxo.setCellValue("Checked");
cellCheckStatusWPBO.setCellValue("Checked");
System.out.println("Equals (dividend)");
break;
} else {
System.out.println("Not Equals Amount (Dividend)");
}
} else {
System.out.println("Not Equals (Dividend)");
}
} else if (df.formatCellValue(cellTitleWPBO).contains("Withdrawal")) {
if (df.formatCellValue(cellDescriptionSaxo).contains("WITHDRAWAL")) {
if (df.formatCellValue(cellNetChangeSaxo).contains(df.formatCellValue(cellAmountWPBO))) {
cellAmountWPBO.setCellStyle(stylePerfectTrades);
cellDescriptionSaxo.setCellStyle(stylePerfectTrades);
cellNetChangeSaxo.setCellStyle(stylePerfectTrades);
cellTitleWPBO.setCellStyle(stylePerfectTrades);
cellCheckStatusSaxo.setCellValue("Checked");
cellCheckStatusWPBO.setCellValue("Checked");
System.out.println("Equals (Withdrawal)");
break;
} else {
System.out.println("Not Equals Amount (Withdrawal)");
}
} else {
System.out.println("Not Equals (Withdrawal)");
}
}
} else {
System.out.println("Checked");
}
}
FileOutputStream outputStream = new FileOutputStream(excelFilePath);
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
System.out.println("Done");
}
}
}
像这样更改代码块:
Cell cellTitleWPBO = sheet.getRow(i).getCell(9);
Cell cellAmountWPBO = sheet.getRow(i).getCell(10);
Cell cellCheckStatusWPBO = sheet.getRow(i).getCell(6);
代码如下:
XSSFRow row = sheet.getRow(i);
if (row != null) {
Cell cellTitleWPBO = row.getCell(9);
Cell cellAmountWPBO = row.getCell(10);
Cell cellCheckStatusWPBO = row.getCell(6);
}
我正在努力使一些 excel 任务自动化,当 运行 程序时,我偶然发现了这样的错误:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "org.apache.poi.xssf.usermodel.XSSFRow.getCell(int)" because the return value of "org.apache.poi.xssf.usermodel.XSSFSheet.getRow(int)" is null at com.excel.auto.ExcelAuto.main(ExcelAuto.java:43)
下面是我目前输入的代码:
public class ExcelAuto {
public static void main(String args[]) throws IOException {
// To get File Path
Scanner scannerFilePath = new Scanner(System.in);
System.out.println("Please Enter File Path: ");
String excelFilePath = scannerFilePath.nextLine();
FileInputStream inputStream = new FileInputStream(excelFilePath);
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
// To get Sheet Name
Scanner scannerSheet = new Scanner(System.in);
System.out.println("Please Enter Excel Sheet Name: ");
String excelSheetName = scannerSheet.nextLine();
XSSFSheet sheet = workbook.getSheet(excelSheetName);
// To set matching transactions to yellow background
CellStyle stylePerfectTrades = workbook.createCellStyle();
stylePerfectTrades.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
stylePerfectTrades.setFillPattern(FillPatternType.SOLID_FOREGROUND);
DataFormatter df = new DataFormatter();
for (int i = 0; i < sheet.getLastRowNum() + 1; i++) {
Cell cellTitleWPBO = sheet.getRow(i).getCell(9);
Cell cellAmountWPBO = sheet.getRow(i).getCell(10);
Cell cellCheckStatusWPBO = sheet.getRow(i).getCell(6);
for (int j = 0; j < sheet.getLastRowNum() + 1; j++) {
Cell cellDescriptionSaxo = sheet.getRow(j).getCell(2);
Cell cellNetChangeSaxo = sheet.getRow(j).getCell(3);
Cell cellCheckStatusSaxo = sheet.getRow(j).getCell(5);
if (df.formatCellValue(cellCheckStatusSaxo).contains("-")) {
if (df.formatCellValue(cellDescriptionSaxo).contains(df.formatCellValue(cellTitleWPBO))) {
if (df.formatCellValue(cellNetChangeSaxo).contains(df.formatCellValue(cellAmountWPBO))) {
cellAmountWPBO.setCellStyle(stylePerfectTrades);
cellDescriptionSaxo.setCellStyle(stylePerfectTrades);
cellNetChangeSaxo.setCellStyle(stylePerfectTrades);
cellTitleWPBO.setCellStyle(stylePerfectTrades);
cellCheckStatusSaxo.setCellValue("Checked");
cellCheckStatusWPBO.setCellValue("Checked");
System.out.println("Equals");
break;
}
// Transaction with same title but not same amount.
else {//If cell has a different value as the one in the row below it
System.out.println("Not Equals lah");
}
} else if (df.formatCellValue(cellTitleWPBO).contains("Conversion")) {
if (df.formatCellValue(cellDescriptionSaxo).contains("DEPOSIT")) {
if (df.formatCellValue(cellNetChangeSaxo).contains(df.formatCellValue(cellAmountWPBO))) {
cellAmountWPBO.setCellStyle(stylePerfectTrades);
cellDescriptionSaxo.setCellStyle(stylePerfectTrades);
cellNetChangeSaxo.setCellStyle(stylePerfectTrades);
cellTitleWPBO.setCellStyle(stylePerfectTrades);
cellCheckStatusSaxo.setCellValue("Checked");
cellCheckStatusWPBO.setCellValue("Checked");
System.out.println("Equals (Conversion Deposit)");
break;
} else {
System.out.println("Not Equals Amount(Conversion)");
}
} else if (df.formatCellValue(cellDescriptionSaxo).contains("WITHDRAWAL")) {
if (df.formatCellValue(cellNetChangeSaxo).contains(df.formatCellValue(cellAmountWPBO))) {
cellAmountWPBO.setCellStyle(stylePerfectTrades);
cellDescriptionSaxo.setCellStyle(stylePerfectTrades);
cellNetChangeSaxo.setCellStyle(stylePerfectTrades);
cellTitleWPBO.setCellStyle(stylePerfectTrades);
cellCheckStatusSaxo.setCellValue("Checked");
cellCheckStatusWPBO.setCellValue("Checked");
System.out.println("Equals (Conversion Deposit)");
break;
} else {
System.out.println("Not Equals Amount(Conversion)");
}
} else {
System.out.println("Not Equals (Conversion)");
}
} else if (df.formatCellValue(cellTitleWPBO).contains("stamp duty")) {
if (df.formatCellValue(cellDescriptionSaxo).contains("WITHDRAWAL")) {
if (df.formatCellValue(cellNetChangeSaxo).contains(df.formatCellValue(cellAmountWPBO))) {
cellAmountWPBO.setCellStyle(stylePerfectTrades);
cellDescriptionSaxo.setCellStyle(stylePerfectTrades);
cellNetChangeSaxo.setCellStyle(stylePerfectTrades);
cellTitleWPBO.setCellStyle(stylePerfectTrades);
cellCheckStatusSaxo.setCellValue("Checked");
cellCheckStatusWPBO.setCellValue("Checked");
System.out.println("Equals (stamp duty)");
break;
} else {
System.out.println("Not Equals Amount(stamp duty)");
}
} else {
System.out.println("Not Equals (stamp duty)");
}
} else if (df.formatCellValue(cellTitleWPBO).contains("Dividend")) {
if (df.formatCellValue(cellDescriptionSaxo).contains("Corporate Actions ")) {
if (df.formatCellValue(cellNetChangeSaxo).contains(df.formatCellValue(cellAmountWPBO))) {
cellAmountWPBO.setCellStyle(stylePerfectTrades);
cellDescriptionSaxo.setCellStyle(stylePerfectTrades);
cellNetChangeSaxo.setCellStyle(stylePerfectTrades);
cellTitleWPBO.setCellStyle(stylePerfectTrades);
cellCheckStatusSaxo.setCellValue("Checked");
cellCheckStatusWPBO.setCellValue("Checked");
System.out.println("Equals (dividend)");
break;
} else {
System.out.println("Not Equals Amount (Dividend)");
}
} else {
System.out.println("Not Equals (Dividend)");
}
} else if (df.formatCellValue(cellTitleWPBO).contains("Withdrawal")) {
if (df.formatCellValue(cellDescriptionSaxo).contains("WITHDRAWAL")) {
if (df.formatCellValue(cellNetChangeSaxo).contains(df.formatCellValue(cellAmountWPBO))) {
cellAmountWPBO.setCellStyle(stylePerfectTrades);
cellDescriptionSaxo.setCellStyle(stylePerfectTrades);
cellNetChangeSaxo.setCellStyle(stylePerfectTrades);
cellTitleWPBO.setCellStyle(stylePerfectTrades);
cellCheckStatusSaxo.setCellValue("Checked");
cellCheckStatusWPBO.setCellValue("Checked");
System.out.println("Equals (Withdrawal)");
break;
} else {
System.out.println("Not Equals Amount (Withdrawal)");
}
} else {
System.out.println("Not Equals (Withdrawal)");
}
}
} else {
System.out.println("Checked");
}
}
FileOutputStream outputStream = new FileOutputStream(excelFilePath);
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
System.out.println("Done");
}
}
}
像这样更改代码块:
Cell cellTitleWPBO = sheet.getRow(i).getCell(9);
Cell cellAmountWPBO = sheet.getRow(i).getCell(10);
Cell cellCheckStatusWPBO = sheet.getRow(i).getCell(6);
代码如下:
XSSFRow row = sheet.getRow(i);
if (row != null) {
Cell cellTitleWPBO = row.getCell(9);
Cell cellAmountWPBO = row.getCell(10);
Cell cellCheckStatusWPBO = row.getCell(6);
}