http://www.moon4chen.com/

POI读取excel表格,首列出现跨行表格时,读取表格数据不全解决办法

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

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

posted @ 2014-11-24 11:56  谌皓徽  阅读(1841)  评论(0编辑  收藏  举报