POI 操作表格删除行包含两种方法:
1. sheet.removeRow(Row row);(POI3.17 版本,试过POI3.8,有问题,POI4.0不支持java6与java7)
该方法主要用与清除行的内容,还保留行的位置
共用方法:
/**
* 从某行开始,清除固定行(清除样式)
* @param sheet
* @param startRow
* @param endRow
*/
public static void removeRow(XSSFSheet sheet, int startRow,int endRow) {
for (int j = endRow; j >= startRow; j--) {
sheet.removeRow(sheet.getRow(j));
}
}
2. sheet.shiftRows(int startRow, int endRow, final int n, boolean copyRowHeight, boolean resetOriginalRowHeight);
参数介绍 : startRow: 开始行 endRow:结束行 n:要移动的行数 copyRowHeight:是否在换班时复制行高
resetOriginalRowHeight:是否将原始行的高度设置为默认值
主要作用: 同过将选中的行上移(n 为负数)或下移(n 为 正数) 来覆盖原来的行来实现删行操作
公用方法:
/**
* 从某行开始,清除固定行(彻底删除),上移
* @param sheet
* @param startRow
* @param endRow
*/
public static void deleteRow(XSSFSheet sheet, int startRow,int rowIndex) {
int lastRowNum = sheet.getLastRowNum();
if(startRow
需要注意的是,如果上移或下移的行与要覆盖的行同时包含相同位置处的合并单元格,需要先把合并单元格去掉再shiftRows,否则会报因单元格合并冲突。
去除合并单元格可以用 sheet.removeMergedRegion(int index);
公用方法:
/**
* 清除合并的单元格(删除纵列)
* @param sheet
* @param startRow 开始行 从0开始
* @param endRow 结束行
* @param startColumn 开始列
* @param endColumn 结束列
*/
public static void removeMergedColRegion(XSSFSheet sheet,int startRow ,int endRow,int startColumn , int endColumn)
{
int sheetMergeCount = sheet.getNumMergedRegions();//获取所有的单元格
int index = 0;//用于保存要移除的那个单元格序号
for (int i = 0; i < sheetMergeCount; i++) {
CellRangeAddress ca = sheet.getMergedRegion(i); //获取第i个单元格
int firstColumn = ca.getFirstColumn();
int lastColumn = ca.getLastColumn();
int firstRow = ca.getFirstRow();
int lastRow = ca.getLastRow();
if(firstRow == startRow && lastRow == endRow){
if(firstColumn == startColumn && lastColumn == endColumn){
index = i;
sheet.removeMergedRegion(index);//移除合并单元格
break;
}
}
}
}
/**
* 删除合并单元格(横向合并),删除行内所有合并
* @param sheet
* @param row 开始行
* @param column 合并开始列
*/
public static void removeMergedRowRegion(XSSFSheet sheet,int startRow ,int endRow , int column)
{
for(int j = startRow ; j <= endRow ; j++){
int sheetMergeCount = sheet.getNumMergedRegions();//获取所有的合并单元格
int index = 0;//用于保存要移除的那个单元格序号
for (int i = 0; i < sheetMergeCount; i++) {
CellRangeAddress ca = sheet.getMergedRegion(i); //获取第i个单元格
int firstColumn = ca.getFirstColumn();
int lastColumn = ca.getLastColumn();
int firstRow = ca.getFirstRow();
int lastRow = ca.getLastRow();
if(firstRow >= startRow && lastRow <= endRow){
if(column >= firstColumn && column <= lastColumn){
index = i;
sheet.removeMergedRegion(index);//移除合并单元格
break;
}
}
}
}
}
后面如需合并单元格,用下面的方法
//合并单元格
CellRangeAddress region1 = new CellRangeAddress(3, removeMs-2, (short) 7, (short) 7);
//参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
sheet.addMergedRegion(region1);