java 基于poi 写入excel 合并单元格

来源:互联网 发布:庆钰软件科技有限公司 编辑:程序博客网 时间:2024/05/01 19:55

效果图如下:



提供个人的一些想法,大牛不要看

(1)对于要写入的数据,树形结构,构建临时类,嵌套,如下图(类似即可)

   public class ValueObj {        private String areaName = "";//名称private String areaId;private int colspan = 1;//该数据占有的合并单元格数量private List<ValueObj> objList = new ArrayList<ValueObj>();//自身private List<ConstructDetail> detailList = new ArrayList<ConstructDetail>();//根节点对应的相关数据


(2)相关代码展示

int flag1 = 1;for (int i = 0; i < aList.size(); i++) {//循环遍历其中的单列的所有数据CellRangeAddress region1 =null;ValueObj vo11 = aList.get(i);// if(i == 0) {region1 = new CellRangeAddress(1,vo11.getColspan(),(short)0,(short)0);//cellrangeaddress参数自行百度sheet.addMergedRegion(region1);//合并单元格setValueByRowAndCol(1 , 0 ,vo11.getAreaName(),sheet,lockstyle);//判断,插入数据相关操作,方法如下flag1 = flag1 + vo11.getColspan();//用于下次创建row}else {region1 = new CellRangeAddress(flag1,flag1 + vo11.getColspan() - 1,(short)0,(short)0);sheet.addMergedRegion(region1);setValueByRowAndCol(flag1 , 0 ,vo11.getAreaName(),sheet,lockstyle);flag1 = flag1 + vo11.getColspan();}}

private static void setValueByRowAndCol(int row, int col, String value,        HSSFSheet sheet,HSSFCellStyle style) {        HSSFRow hssfrow = sheet.getRow(row);//取数据        HSSFCell cell = null;        if (hssfrow == null) {            hssfrow = sheet.createRow(row);            cell = hssfrow.createCell(col);            cell.setCellType(HSSFCell.ENCODING_UTF_16);            cell.setCellValue(value);        } else {            cell = hssfrow.createCell(col);            cell.setCellType(HSSFCell.ENCODING_UTF_16);            cell.setCellValue(value);            cell.setCellStyle(style);        }    }


(3)最后一层数据内容的处理,相关部分代码

int flag5 =1;for (int i = 0; i < aList.size(); i++) {ValueObj vo1 = aList.get(i);for (int j = 0; j < vo1.getObjList().size(); j++) {ValueObj vo2 = vo1.getObjList().get(j);for (int k = 0; k < vo2.getObjList().size(); k++) {ValueObj vo3 = vo2.getObjList().get(k);for (int t = 0; t < vo3.getObjList().size(); t++) {ValueObj vo4 = vo3.getObjList().get(t);for (int x = 0; x < vo4.getDetailList().size(); x++) {ConstructDetail cd = vo4.getDetailList().get(x); HSSFRow hssfrow = sheet.getRow(flag5);     if (hssfrow == null) {            hssfrow = sheet.createRow(flag5);        }hssfrow.setHeight((short) 400);Cell cellData = hssfrow.createCell(4);cellData.setCellType(HSSFCell.CELL_TYPE_STRING);cellData.setCellValue(cd.getConstructContent());Cell cellData5 = hssfrow.createCell(5);cellData5.setCellType(HSSFCell.CELL_TYPE_STRING);cellData5.setCellValue(cd.getPageNum());Cell cellData6 = hssfrow.createCell(6);cellData6.setCellType(HSSFCell.CELL_TYPE_STRING);Cell cellData7 = hssfrow.createCell(7);cellData7.setCellType(HSSFCell.CELL_TYPE_STRING);cellData7.setCellValue(cd.getProjectFeature());.//此处省略..flag5++;}




原创粉丝点击