ExcelReader workbook.setMissingCellPolicy(Row.CREATE_NULL_AS_BLANK)不起作用

我正在尝试使用apache poi来读取excel文件(xls)文件。 在这种情况下,在读取行期间,如果一个单元格丢失(cellIterator)正在跳过该单元格,并将下一个值放到不同的头部。

ABC

1 2 3

4空白6

在上面的情况下,它是在空白单元格的'B'列6,我需要B作为空白string。

`package com.howtodoinjava.demo.poi; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; public class ReadExcelDemo { Integer rowNum; Iterator<Row> rowIterator; HSSFWorkbook workbook; HSSFSheet sheet; FileInputStream file; public ReadExcelDemo(File file1) throws IOException{ this.file = new FileInputStream(file1); // Create Workbook instance holding reference to .xlsx file this.workbook = new HSSFWorkbook(file); workbook.setMissingCellPolicy(Row.CREATE_NULL_AS_BLANK); // Get first/desired sheet from the workbook this.sheet = workbook.getSheetAt(0); } public static void main(String[] args) throws IOException { for(int i =0;i<5;i++) { List<String> rowData = new ReadExcelDemo(new File( "howtodoinjava_demo_xls.xls")).readRow(); System.out.println(rowData); } } private List<String> readRow() throws IOException { List<String> rowData = new ArrayList<String>(); // Iterate through each rows one by one rowIterator = sheet.iterator(); if (getNext()) { Row row = rowIterator.next(); // For each row, iterate through all the columns Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); // Check the cell type and format accordingly switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: rowData.add(String.valueOf(cell.getNumericCellValue())); System.out.print(cell.getNumericCellValue() + "\t"); break; case Cell.CELL_TYPE_STRING: rowData.add(cell.getStringCellValue()); System.out.print(cell.getStringCellValue() + "\t"); break; case Cell.CELL_TYPE_BLANK: rowData.add(""); System.out.println(""); } } System.out.println(""); } rowNum++; close(); return rowData; } private void close() throws IOException { file.close(); } private boolean getNext() { // TODO Auto-generated method stub if (null == rowNum) { rowNum = 0; } return rowIterator.hasNext(); } } ` 

这是代码片段。 我试过workbook.setMissingCellPolicy(Row.CREATE_NULL_AS_BLANK); 但它不工作。 任何build议,为什么发生?

我已经使用迭代器的行来逐一读取行,使rowIterator类的级别,然后使用for循环迭代列,并采取行数据的完全控制,并设置策略为'创build为空作为null'。

 final Row row = this.sheet.getRow(rowNum); if (null != row) { int lastColumn = row.getLastCellNum(); // Removing cellIterator as it was not supporting // MissingCellPolicy and doing the column iteration through for // loop for (int cn = Constants.EMPTY_INT; cn < lastColumn; cn++) { Cell cell = row.getCell(cn, Row.CREATE_NULL_AS_BLANK); switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: addNumericCell(rowData, cell); break; case Cell.CELL_TYPE_STRING: rowData.add(cell.getStringCellValue()); break; case Cell.CELL_TYPE_BLANK: rowData.add(Constants.EMPTY_STRING); break; default: break; } } } 

有用的链接为Apache poi 。

使用POI 3.10的简化代码。 下面的代码返回工作表数据作为列表,并为具有NULL值的单元格工作。

 /** * Read XLSx and return sheet data as List * * @param inputFile * @param sheetNo * @return * @throws FileNotFoundException * @throws IOException */ public static List<String> readXlsxAsList(File inputFile, int sheetNo) throws FileNotFoundException, IOException { List<String> sheetAsList = new ArrayList<String>(); /** * Get workbook */ XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(inputFile)); /** * Get sheet */ XSSFSheet sheet = wb.getSheetAt(sheetNo); Iterator<Row> rowIterator = sheet.iterator(); /** * Iterate Rows */ while (rowIterator.hasNext()) { Row row = rowIterator.next(); StringBuffer sb = new StringBuffer(); for (int col = 0; col < row.getLastCellNum(); col++) { /** * Create cell to force as BLANK when NULL */ Cell cell = row.getCell(col, Row.CREATE_NULL_AS_BLANK); /** * Force cell type as String */ cell.setCellType(Cell.CELL_TYPE_STRING); /** * Add to buffer */ sb.append(cell.getStringCellValue() + "|"); } /** * Add buffer to list */ sheetAsList.add(sb.toString()); } return sheetAsList; }