一、POI-操作行
以下为本人使用
POI操作行
的实例;
1.1 场景:直接插入行
举个栗子(如图)~
这种情况下,我们希望在表单中新增若干行;
请食用以下方法:
createRow(int rownum);//在指定索引处新增一行
注意哈:上方举例表头
XX医院XX报告单
字样所在的单元格可能是由若干行
合并
后的结果;
行的索引应该根据excel左侧显示的行号来计算;
列的索引同理;
@param rownum :添加行所在的索引
@return XSSFRow :当前行对象
public XSSFRow createRow(int rownum) {
}
此时新鲜出炉的行对象已经可以获取到啦!
适用于:表单excel/其他类excel模板中没有尾部信息时的插入操作;
因为 若添加行所在的索引位置
已有模板数据
,此时会将该行数据进行
覆盖
;
当然接下来介绍有尾部信息时的插入行操作方法~~~
单元格样式的设置见1.3;
1.2 场景:先移动旧行 再插入新行
举个栗子:
这种情况下,我们同样希望在表单中新增若干行,但是此时模板是有
尾部
的;
思路:先把尾部所在行进行下移;再新增行;
同样,请食用以下方法:
shiftRows(int startRow, int endRow, int n);//把指定索引的列向endRow方向移动n行(直男译)
createRow(int rownum);//在指定索引处新增一行
@param startRow:被移动行(目标行)的索引
@param endRow:移动方向..索引(将要向移动方向行的索引)
@param n:移动n行
@param copyRowHeight:在移动时,是否复制行高
@param resetOriginalRowHeight:是否把原来的行高设置为默认的
//构造方法1
public void shiftRows(int startRow, int endRow, int n) {
shiftRows(startRow, endRow, n, false, false);
}
//构造方法2
public void shiftRows(int startRow, int endRow, final int n,
boolean copyRowHeight, boolean resetOriginalRowHeight) {}
@param rownum :添加行所在的索引
@return XSSFRow :当前行对象
public XSSFRow createRow(int rownum) {
}
1.3 单元格样式的设置
设置单元格样式的前提:通过行对象
XSSFRow
拿到目标单元格对象
XSSFCell
方法:
获取指定索引的单元格(通过行对象定位列索引 拿到列对象)
public XSSFCell getCell(int cellnum) {
return getCell(cellnum, _sheet.getWorkbook().getMissingCellPolicy());
}
为指定单元格设置指定的样式
CellStyle 为样式接口 一般传参可以传XSSFCellStyle
public void setCellStyle(CellStyle style) {}
在此不得不介绍另一种方法
---获取单元格的样式 XSSFCellStyle
public XSSFCellStyle getCellStyle() {}
//设置单元格样式
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream("路径"));
XSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setBorderBottom(BorderStyle.THIN);//下边框样式
cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());//下边框颜色
cellStyle.setBorderLeft(BorderStyle.THIN);//左边框
cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
cellStyle.setBorderTop(BorderStyle.THIN);//上边框
cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
cellStyle.setBorderRight(BorderStyle.THIN);//右边框
cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
cellStyle.setAlignment(HorizontalAlignment.CENTER); // 设置单元格水平方向对其方式为居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//设置单元格垂直方向对其方式为居中
cellStyle.setWrapText(true);
二、POI-操作列
三、POI-合并单元格
这里介绍的合并单元格方法是
XSSFSheet
对象中的哦
//合并目标单元格
public int addMergedRegion(CellRangeAddress region) {
return addMergedRegion(region, true);
}
//通过ref这个字符串获取到被合并的大单元格 ---- 也就是结果单元格
public static CellRangeAddress valueOf(String ref) {
//这里略写,看源码的小伙伴可以用idea去瞅瞅
return new CellRangeAddress(****);
}
举个栗子~
XSSFSheet sheet = workbook.getSheetAt(0);
//合并B1~C1
sheet.addMergedRegion(CellRangeAddress.valueOf("$B$1:$C$1"));
标题说解决单元格边框缺少问题;这个是我在coding的时候遇到的,自己解决的思路:
先增加单元格 把数据赋好之前
再最后一步之前 进行合并单元格即可
操作行中包括了一些操作列的内容;后续有时间再整理操作列的方法; 希望对在解析excel模板的码友们有帮助~