POI操作行列、合并单元格、解决单元格边框缺少问题

  • Post author:
  • Post category:其他




一、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模板的码友们有帮助~



版权声明:本文为Ricky_As原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。