moonlight-fly

image

在POI读取表格时候。如上图表格。在一般读取时,因为A4-A8被合并,导致在读取时,只能读取到下图数据:

image

而很多条记录很忽略。


下面贴出groovy下处理代码:

(0..<wb.numberOfSheets).each { sheetIndex ->
    def st = wb.getSheetAt(sheetIndex)
    /*
     * 遍历每一行
     */
    (0..st.lastRowNum).each { rowIndex->
        def row = st.getRow(rowIndex)
        //储存每一行数据
        def values = new String[row.lastCellNum]
        /*
         * 遍历每一列
         */
        (0..<row.lastCellNum).each { columnIndex->
            def cell = row.getCell(columnIndex)
            if (cell != null){
                values[columnIndex] = Tools.getValue(cell)
            }
        }
        //如果该行有值,则保留
        if (values.find {it != null}){
            result.add(values)
        }
    }

 

原因:

因为第一列“通 识 必 修 课”出现了跨行,所以导致了A5、A6、A7、A8为null。

导致无法读取5-8行数据。

解决办法:

只要让第一行不为null 或空即可。

贴出改进后代码,请注意加粗部分

/*
     * 遍历每一个工作表
     */
    (0..<wb.numberOfSheets).each { sheetIndex ->
        def st = wb.getSheetAt(sheetIndex)
        /*
         * 遍历每一行
         */
        (0..st.lastRowNum).each { rowIndex->
            def row = st.getRow(rowIndex)
            //储存每一行数据
            def values = new String[row.lastCellNum]
            /*
             * 遍历每一列
             */
            (0..<row.lastCellNum).each { columnIndex->
                def cell = row.getCell(columnIndex)
                if (cell != null){
                    values[columnIndex] = Tools.MARK + Tools.getValue(cell)
                }
            }
            //如果该行有值,则保留
            if (values.find {it != Tools.MARK}){
                result.add(values)
            }
        }

 

Tools.MARK 是一个特殊符号,在处理时去除就ok。

修改后运行结果如下:

image

可以成功读取首列出现换行的表格!

分类:

技术点:

相关文章:

  • 2021-12-19
  • 2021-11-30
  • 2021-12-22
  • 2021-08-09
  • 2021-08-04
  • 2021-08-11
  • 2021-06-28
  • 2021-05-31
猜你喜欢
  • 2021-11-23
  • 2021-12-19
  • 2021-12-19
  • 2021-12-29
  • 2021-10-20
  • 2021-12-14
相关资源
相似解决方案