天天看点

POI 动态合并单元格

所谓动态合并,要明白,怎样才能合并,

是根据id还是根据其他的,

比如根据id,要想合并,那么要合并的两项的数据必须挨着,

那么问题就在于sql 怎么去写.

因此,POI动态合并的操作就一句代码,主要还是在sql, order by XXX 

/ *****
查询结果 
****** /
	/ **
	 *报表导出
	 *: 
	 * @throws异常
	 * /
	public void queryExcelActionInfo(OutputStream out,
			Map <String,Object>参数)throws Exception {
		List <ActionCount> queryActionInfo = actionCountMapper
				.queryExcelReportInfo(parameters);


		/ ****************************************** POI ****** ********************************************* /
		System.out
				.println(“============================================== =================“);
		HSSFWorkbook book = new HSSFWorkbook();
		HSSFSheet sheet = book.createSheet(“口腔saas操作统计”);
		for(int i = 0; i <18; i ++){
			sheet.setColumnWidth(i,4000);


		}}
		/ *****************************设置表头***************** ****************** /
		HSSFRow row1 = sheet.createRow(0);

		//此处可以 循环创建cell
		HSSFCell cell1 = row1.createCell(0),cell2 = row1.createCell(1),cell3 = row1
				.createCell(2),cell4 = row1.createCell(3),cell5 = row1
				.createCell(4);
			cell1.setCellValue(“序号”);
			cell2.setCellValue(“名称”);
			cell3.setCellValue(“时间”);
			cell4.setCellValue(“区域(地址)”);		
			
		/ ***********************循环创建表格*********************** *************** /
		int count = 0; //合并序号
		for(int i = 0; i <queryActionInfo.size(); i ++){
			HSSFRow row = sheet.createRow((int)i + 1);
			ActionCount actionCount = queryActionInfo.get(i);

			//创建单元格并设置值
		
			if(null!= actionCount.getOrgName()){
				row.createCell(1).setCellValue(actionCount.getOrgName());
			}}
			if(null!= actionCount.getInstalltime()){
				String string = DateUtil.StringToString(actionCount.getInstalltime(),“yyyy-MM-dd”);
				row.createCell(2).setCellValue(string);
			}}
			if(null!= actionCount.getAddress()){

				row.createCell(3).setCellValue(actionCount.getAddress());
			}}
			if(null!= actionCount.getUsername()){

				row.createCell(4).setCellValue(actionCount.getUsername());
			}}
			
			
			if(i!= 0){
				//比较id如果一样则合并
				if(queryActionInfo.get(i-1).getOrgID().equals(queryActionInfo.get(i).getOrgID())){
					/ * sheet.addMergedRegion(new CellRangeAddress(1,1,0,0)); 
					
					  参数一:起始行,参数二:结束行,参数三:起始列,参数四:结束列
				 	  此处可以循环进行合并		
					* /
				sheet.addMergedRegion(new CellRangeAddress(i,1 + i,0,0));
				sheet.addMergedRegion(new CellRangeAddress(i,1 + i,1,1));
				sheet.addMergedRegion(new CellRangeAddress(i,1 + i,2,2));
				sheet.addMergedRegion(new CellRangeAddress(i,1 + i,3,3));   
				count ++;
					}} 
				}}
			row.createCell(0).setCellValue(Integer.parseInt(actionCount.getRowNo() -  count));
		}}
		book.write(out);
				
}}
           

//循环合并:

if (i != 0) {
	if (purchaseLibList.get(i - 1).getPurId().equals(purchaseLibList.get(i).getPurId())) {
            // 参数一:起始行,参数二:结束行,参数三:起始列,参数四:结束列
	    for (int j = 0; j < 12; j++) {
	          sheet.addMergedRegion(new CellRangeAddress(i, 1 + i, j, j));
		}

	}
   }
           
//Controller  导出 兼容性
		if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
			fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");// firefox浏览器
		} else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
			fileName = URLEncoder.encode(fileName, "UTF-8");// IE浏览器
		} else if (request.getHeader("User-Agent").toUpperCase().indexOf("CHROME") > 0) {
			fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");// 谷歌
		}
           
poi

继续阅读