在POI读取表格时候。如上图表格。在一般读取时,因为A4-A8被合并,导致在读取时,只能读取到下图数据:
而很多条记录很忽略。
下面贴出groovy下处理代码:
(0..
def st = wb.getSheetAt(sheetIndex)
/*
* 遍历每一行
*/
(0..st.lastRowNum).each { rowIndex->
def row = st.getRow(rowIndex)
//储存每一行数据
def values = new String[row.lastCellNum]
/*
* 遍历每一列
*/
(0..
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..
def st = wb.getSheetAt(sheetIndex)
/*
* 遍历每一行
*/
(0..st.lastRowNum).each { rowIndex->
def row = st.getRow(rowIndex)
//储存每一行数据
def values = new String[row.lastCellNum]
/*
* 遍历每一列
*/
(0..
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。
修改后运行结果如下:
可以成功读取首列出现换行的表格!