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

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

你可能感兴趣的:(Excel)