zoukankan      html  css  js  c++  java
  • java poi3.10.1基本excel使用

    比较好的实现方式是通过提前做好excel文件,然后使用这个做好的excel文件作为模板,使用poi读入这个文件,将需要的值填入;这样就不要编程来设置行宽的样式;

    效果:

    代码:

    //时间
    		String checkTime = "yyyy/MM/dd";
    
    		//人员查询
    		Set preParticipantNames = new HashSet();
    
    		HSSFWorkbook wb = new HSSFWorkbook();
    
    		// 生成一个样式
    		HSSFCellStyle style = wb.createCellStyle();
    		this.setHSSFCellBorder(style);
    		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 设置单元格为水平对齐的类型
    		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    		HSSFFont songFont = createSongFont(wb);
    		style.setFont(songFont);
    
    		HSSFCellStyle songPoint14FontStyle = wb.createCellStyle();
    		this.setHSSFCellBorder(songPoint14FontStyle);
    		songPoint14FontStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    		songPoint14FontStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 设置单元格为水平对齐的类型
    		HSSFFont songPoint14Font = createSongFont(wb);
    		songPoint14Font.setFontHeightInPoints((short) 14); //设置字号
    		songPoint14FontStyle.setFont(songPoint14Font);
    
    		HSSFCellStyle arialFontStyle = wb.createCellStyle();
    		this.setHSSFCellBorder(arialFontStyle);
    		arialFontStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    		arialFontStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 设置单元格为水平对齐的类型
    		HSSFFont arialFont = createSongFont(wb);
    		arialFont.setFontName("Arial");
    		arialFontStyle.setFont(arialFont);
    
    		HSSFCellStyle rightBoldStyle = wb.createCellStyle();
    		rightBoldStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    		rightBoldStyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);// 设置单元格为水平对齐的类型
    		HSSFFont boldSongFont = createSongFont(wb);
    		boldSongFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
    		rightBoldStyle.setFont(boldSongFont);
    
    		HSSFCellStyle songPoint22RedFontStyle = wb.createCellStyle();
    		songPoint22RedFontStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    		songPoint22RedFontStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 设置单元格为水平对齐的类型
    		HSSFFont songPoint22RedFont = createSongFont(wb);
    		songPoint22RedFont.setFontHeightInPoints((short) 22); //设置字号
    		songPoint22RedFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
    		songPoint22RedFont.setColor(HSSFColor.RED.index);
    		songPoint22RedFontStyle.setFont(songPoint22RedFont);
    
    		HSSFCellStyle contentDefaultStyle = wb.createCellStyle();
    		this.setHSSFCellBorder(contentDefaultStyle);
    		contentDefaultStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    		contentDefaultStyle.setFont(songFont);
    
    		HSSFCellStyle verticalStyle = wb.createCellStyle();
    		this.setHSSFCellBorder(verticalStyle);
    		verticalStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 设置单元格为水平对齐的类型
    		verticalStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    		verticalStyle.setFont(songFont);
    
    
    
    		// 建立新的sheet对象(excel的表单)
    		HSSFSheet sheet = wb.createSheet(excelFileName);
    		sheet.setColumnWidth(0,15* 256);
    		sheet.setColumnWidth(1,15* 256);
    		sheet.setColumnWidth(2,60* 256);
    		sheet.setColumnWidth(3,15* 256);
    
    		sheet.addMergedRegion(new CellRangeAddress(0,1,0,3));
    		sheet.addMergedRegion(new CellRangeAddress(2,3,0,3));
    		sheet.addMergedRegion(new CellRangeAddress(4,5,0,0));
    		sheet.addMergedRegion(new CellRangeAddress(4,5,1,1));
    		sheet.addMergedRegion(new CellRangeAddress(4,5,2,2));
    		sheet.addMergedRegion(new CellRangeAddress(4,5,3,3));
    
    
    		int beginRowIndex = 6;
    		int endRowIndex = 6;
    
    
    		//要获总记录,下一步来确定合并的单元格的数量
    		List<TbCheckSamplEventReportVo> detailList = this.checkCountDao.getCheckResultDaily(checkEventCountDto);
    
    
    		if (detailList != null && detailList.size() > 0) {
    			endRowIndex += detailList.size() -1;
    			log.info("detailList.size() " + detailList.size());
    		}
    		sheet.addMergedRegion(new CellRangeAddress(beginRowIndex,endRowIndex,0,0));
    
    
    		int sumScore = 0;
    		for (int i = beginRowIndex; i <= endRowIndex; i++) {
    			int j = i - beginRowIndex;
    			sheet.addMergedRegion(new CellRangeAddress(i,i,1,3));
    			HSSFRow row = sheet.createRow(i);
    			if (i == beginRowIndex) {
    				HSSFCell problemTextCell = row.createCell(0);
    				problemTextCell.setCellValue("问题");
    				problemTextCell.setCellStyle(verticalStyle);
    			}
    
    			StringBuilder contentDetail = new StringBuilder();
    			if (detailList != null && detailList.size() > 0) {
    				BigDecimal checkScore = detailList.get(j).getCheckScore() == null ? null : detailList.get(j).getCheckScore();
    				if (checkScore != null) {
    					sumScore += checkScore.intValue();
    				}
    				if (detailList.get(j).getPreParticipantName() != null) {
    					preParticipantNames.add(detailList.get(j).getPreParticipantName());
    				}
    
    				contentDetail.append(j+1).append(".").append(detailList.get(j).getDesc()).append(" ").append("xxx").append(checkScore == null ? "" : checkScore.intValue())
    						.append("xxx(").append(detailList.get(j).getCheckTypeName()).append(")");
    			}
    
    			HSSFCell cell = row.createCell(1);
    			cell.setCellValue(contentDetail.toString());
    			cell.setCellStyle(contentDefaultStyle);
    
    			HSSFCell cell2 = row.createCell(2);
    			cell2.setCellStyle(contentDefaultStyle);
    
    			HSSFCell cell3 = row.createCell(3);
    			cell3.setCellStyle(contentDefaultStyle);
    
    		}
    
    
    
    		//合计
    		sheet.addMergedRegion(new CellRangeAddress(endRowIndex+1,endRowIndex+1,1,3));
    		//人员
    		sheet.addMergedRegion(new CellRangeAddress(endRowIndex+2,endRowIndex+2,1,3));
    
    
    		HSSFRow row0 = sheet.createRow(0);
    		HSSFCell row0Cell0 = row0.createCell(0);
    		row0Cell0.setCellValue("xxxxxx");
    		row0Cell0.setCellStyle(songPoint22RedFontStyle);
    
    		HSSFRow row1 = sheet.createRow(2);
    		HSSFCell row1Cell0 = row1.createCell(0);
    		row1Cell0.setCellValue(checkEventCountDto.getCompanyName());
    		row1Cell0.setCellStyle(rightBoldStyle);
    
    		//5行
    		HSSFRow row2 = sheet.createRow(4);
    		HSSFCell row2Cell0 = row2.createCell(0);
    		row2Cell0.setCellStyle(style);
    
    		HSSFCell row2Cell1 = row2.createCell(1);
    		row2Cell1.setCellStyle(style);
    
    		HSSFCell row2Cell2 = row2.createCell(2);
    		row2Cell2.setCellStyle(style);
    		row2Cell2.setCellValue("时间");
    
    		HSSFCell row2Cell3 = row2.createCell(3);
    		row2Cell3.setCellValue(checkTime);
    		row2Cell3.setCellStyle(arialFontStyle);
    
    		//6行
    		HSSFRow row3 = sheet.createRow(5);
    		HSSFCell row3Cell0 = row3.createCell(0);
    		row3Cell0.setCellStyle(style);
    
    		HSSFCell row3Cell1 = row3.createCell(1);
    		row3Cell1.setCellStyle(style);
    
    		HSSFCell row3Cell2 = row3.createCell(2);
    		row3Cell2.setCellStyle(style);
    
    		HSSFCell row3Cell3 = row3.createCell(3);
    		row3Cell3.setCellStyle(style);
    
    
    
    
    		//xxxxx
    		HSSFRow row5 = sheet.createRow(endRowIndex+1);
    		HSSFCell row5Cell0 = row5.createCell(0);
    		row5Cell0.setCellValue("合计");
    		row5Cell0.setCellStyle(style);
    		HSSFCell row5Cell1 = row5.createCell(1);
    		row5Cell1.setCellValue(new StringBuilder("xx").append(sumScore).append("xxx").toString());
    		row5Cell1.setCellStyle(songPoint14FontStyle);
    		HSSFCell row5Cell2 = row5.createCell(2);
    		row5Cell2.setCellStyle(songPoint14FontStyle);
    		HSSFCell row5Cell3 = row5.createCell(3);
    		row5Cell3.setCellStyle(songPoint14FontStyle);
    
    
    
    		//人员
    		HSSFRow row6 = sheet.createRow(endRowIndex+2);
    		HSSFCell row6Cell0 = row6.createCell(0);
    		row6Cell0.setCellValue("人员");
    		row6Cell0.setCellStyle(style);
    
    		StringBuilder tmpNames = new StringBuilder();
    		if (preParticipantNames.size() > 0){
    			preParticipantNames.forEach(item -> tmpNames.append(item).append(","));
    		}
    		HSSFCell row6Cell1 = row6.createCell(1);
    		row6Cell1.setCellValue(tmpNames.toString().length() > 0 ? (tmpNames.toString().substring(0,tmpNames.toString().length() -1)) : "");
    		row6Cell1.setCellStyle(style);
    
    		HSSFCell row6Cell2 = row6.createCell(2);
    		row6Cell2.setCellStyle(style);
    
    		HSSFCell row6Cell3 = row6.createCell(3);
    		row6Cell3.setCellStyle(style);
    
    
    		return wb;
    

      代码里面的问题:

    1、关于cell的style可以使用for循环来做,代码更加简洁;

    2、每列的宽度没有做子适应展开,现在四列是用了固定值来设置列宽的。

    3、...

  • 相关阅读:
    设计模式:组合模式
    对技术的认识及思考
    设计模式:策略模式
    java集合:常用集合的数据结构
    设计模式:代理模式
    java反射
    Spring事务管理
    在Spring使用junit注解进行单元测试
    tomcat限制ip访问
    获取openid回调两次
  • 原文地址:https://www.cnblogs.com/zhucezmf/p/12070519.html
Copyright © 2011-2022 走看看