Apache Poi在XssfReader和SheetContentsHandler中添加了缺少的单元格策略

时间:2017-05-30 10:27:29

标签: java excel apache apache-poi

考虑以下Excel表格

Id         Reference Id    Name
20059136                    Gj
20012323                    Am

如何处理Event model XSSFReader中缺少的单元格,在此处读取数据时,会跳过列Reference Id并发生一次左移,因此Name列中的所有值都会显示被附加到读取输出中的Reference Id

如何使用Apache POI' XssfReader'找到丢失的单元格或空/空白单元格和' SheetContentsHandler'。

  1. 如果有大量文件读取,如何动态查找missing cells
  2. 以及如何在“事件模型'”
  3. 的情况下添加MissingCellPolicy

    引用

    1. https://stackoverflow.com/a/36776914/4522875
    2. https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/eventusermodel/XLSX2CSV.java
    3. 感谢。

1 个答案:

答案 0 :(得分:0)

希望这有帮助,

    @Override
    public void cell(String cellReference, String formattedValue, XSSFComment comment) {
        if (currentRow == this.headerRow) {
            // populate headers 
            populateHeaders(cellReference, formattedValue));
        } else if(currentRow > this.headerRow){
            // populate values based on position referencing particular header
            final String header = headers.get(cellReference.replaceAll(String.valueOf(currentRow + 1), "") + this.headerRow);
            values.put(header, formattedValue);
        }
    }

黑客使用以下方法获取currentRow

    @Override
    public void startRow(int rowNum) {
        currentRow = rowNum;
        values = new LinkedHashMap<>();
    }

使用标题位置填充提取的数据

        // populate values based on position referencing particular header
        final String header = headers.get(cellReference.replaceAll(String.valueOf(currentRow + 1), "") + this.headerRow);

以后可以使用基于自己的逻辑的空白,空或自定义值清除缺少的单元格,谢谢。