gpt4 book ai didi

java - Apache POI MissingCellPolicy 不适用于 Excel 读写操作

转载 作者:行者123 更新时间:2023-12-02 02:11:22 26 4
gpt4 key购买 nike

我正在尝试使用 Apache POI 在 Java 中进行 Excel 读写操作。当我尝试传递 Excel 中没有任何数据的单元格时,预计会返回空白,但会抛出 Java 空指针异常。但是,当我传递有一些数据的单元格时, getCelldata 和 setCelldata 方法都工作正常。这是代码片段

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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;
import org.apache.poi.ss.usermodel.Row;

public class ExcelUtils {
private static XSSFSheet ExcelWSheet;
private static XSSFWorkbook ExcelWBook;
private static XSSFCell xCell;
private static XSSFRow xRow;

//This method is to set the File path and to open the Excel file, Pass Excel Path and Sheetname as Arguments to this method

public static void setExcelFile(String Path,String SheetName) throws Exception {
try {

// Access the required test data sheet
FileInputStream inputStream = new FileInputStream(new File(Path));
ExcelWBook = new XSSFWorkbook(inputStream);
ExcelWSheet = ExcelWBook.getSheet(SheetName);
} catch (Exception e){
throw (e);
}
}

//This method is to read the test data from the Excel cell, in this we are passing parameters as Row num and Col num

public static String getCellData(int RowNum, int ColNum) throws Exception{
try{
xCell = ExcelWSheet.getRow(RowNum).getCell(ColNum, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
String CellData = xCell.getStringCellValue();
return CellData;
}catch (Exception e){
throw(e);
}
}

//This method is to write in the Excel cell, Row num and Col num are the parameters

public static void setCellData(String Result, int RowNum, int ColNum) throws Exception {

try{
xRow = ExcelWSheet.getRow(RowNum);
xCell = xRow.getCell(ColNum, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL);
if (xCell == null) {
xCell = xRow.createCell(ColNum);
xCell.setCellValue(Result);
} else {
xCell.setCellValue(Result);
}
// Constant variables Test Data path and Test Data file name

FileOutputStream fileOut = new FileOutputStream(Constants.Path_TestData);
ExcelWBook.write(fileOut);
fileOut.flush();
fileOut.close();
}catch(Exception e){
throw (e);
}
}
}

在行中抛出错误,但预期 xCell 应该具有空白值,因为我提供了 MissingCellPolicy

xCell = ExcelWSheet.getRow(RowNum).getCell(ColNum, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);

还有

xCell = xRow.getCell(ColNum, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL);

提前致谢

最佳答案

可能您正在传递一个完全空的行,这就是您的 getRow() 方法失败并给出 NullPointerException 的原因。

当您迭代行中的列时,某些空白单元格甚至可能不存在,这可能会导致毫无戒心的代码抛出 NullPointerException。 MissingCellPolicy 仅应用于单元格。所以你不能将整行保留为空

CREATE_NULL_AS_BLANK - 如果返回的 Cell 不存在,则不返回 null,而是创建一个单元格类型为“blank”的新 Cell。这可以帮助方便地避免 NullPointerExceptions。

RETURN_BLANK_AS_NULL - 即使单元格存在但单元格类型为“空白”,也会返回 null。这可以让您忽略确实存在的空白单元格。

RETURN_NULL_AND_BLANK - 不修改现有结构;对于不存在的单元格返回 null,如果存在但其单元格类型为空白,则返回空白单元格。这是不采用 MissingCellPolicy 的 getCell 重载的行为。

关于java - Apache POI MissingCellPolicy 不适用于 Excel 读写操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49988587/

26 4 0
文章推荐: java - Jackson ObjectMapper 添加反序列化 List 并注册模块覆盖旧的