poi操作excel之填充数据、删除行
每篇一句励志:有人说,这世间有两种浪漫,一种是相濡以沫,另一种是相忘于江湖。
废话不多说,直接上代码!
// 获取到你要填充数据的sheet
XSSFSheet sheet = wb.getSheet("sheet名称");
// 定义填充数据的开始行
int rowNum = 6;
//开始循环填充数据
for (TCompanyOverhaul tCompanyOverhaul : collect) {
//复制模板行
// 第一个参数:模版行开始行
// 第二个参数:模版行结束行
// 第三个参数:复制至某行
// 第四个参数:暂没用到,没有细研究
sheet.copyRows(5,5,rowNum,new CellCopyPolicy());
// 获取到需要填充数据的行号
XSSFRow row = sheet.getRow(rowNum);
// 获取到当前行的第一个单元格
//第一列 企业
row.getCell(0).setCellValue(tCompanyOverhaul.getCompanyName());
// 获取到当前行的第二个单元格
//第二列 装置代码
row.getCell(1).setCellValue(tCompanyOverhaul.getUnitCode());
// 获取到当前行的第三个单元格
//第三列 装置名称
row.getCell(2).setCellValue(tCompanyOverhaul.getUnitName());
}
// 因为在第5行是一行模版行,没有数据 所以到最后需要删掉他
// 第一个参数 数据开始行
// 第二个参数 数据结束行
// 第三个参数 移动几行 正数向下,负数向下
sheet.shiftRows(6,sheet.getLastRowNum(),-1);
删除行有俩种方式
- 删除行内容但保留行位置
sheet.removeRow(“需要删除的行号”); - 整行删除
sheet.shiftRow(startRow,endRow,shiftCount);
第一个参数 数据开始行
第二个参数 数据结束行
第三个参数 移动几行 正数向下,负数向下
复制单元格的样式还有一种
前提是第一行或者第一行的第一个单元格有样式。
对单元格样式或者内容格式没有特殊要求,只拿样式进行渲染
可以先获取到第一行的第一个单元格的样式,然后在循环每一行的每一个单元格的时候都把获取到的样式set进去。
切记
row1.createCell(0).setCellValue(“value”);
row1.createCell(0).setCellStyle(“CellStyle”);
上边俩行代码会彼此覆盖(顺序不同:样式覆盖值、值覆盖样式),先者使用create,后者就get。这样不会覆盖。