poi导出excel以及一些常用格式样式设置

在经常处理数据的项目中经常有上传下载导入导出这种功能,前几篇写过上传txt以及解析,这套代码本来是一个功能,先是上传txt到服务器然后解析,转码,在导出到excel中。业务流程较为繁琐不便透露,这里在发布一个导出的文章,记录一下顺便看看对大家有帮助没:
先是建立一个文件路径和一个list,下边导出使用:

String txtFilePath = request.getServletContext().getRealPath("./")
				 + File.separator + System.currentTimeMillis() +"_oldFile";
List<Map<String,Object>> mapList = new ArrayList<Map<String,Object>>();

实例HSSFWorkbook,这种情况是考虑要生成多个sheet页,这样的话下边执完几次createExcel就创建几个sheet页,都在一个excel中:

HSSFWorkbook workboot = new HSSFWorkbook();
createExcel(workboot,txtFilePath,mapList);
workboot.close();

下边是导出的代码以及一些常用格式样式的设置,这里不拆开写了,注释很明确:

private void createExcel(HSSFWorkbook workboot, String txtFilePath, List<Map<String, Object>> mapList) throws FileNotFoundException, IOException {
		// TODO Auto-generated method stub
		//创建sheet页,括号里的sheet页的名字,如果不添加默认是sheet1、sheet2....
		HSSFSheet sheet = workboot.createSheet("sheet第一页");
		HSSFRow row = null;
		HSSFCell cell = null;
		//设置列宽
		sheet.setColumnWidth(0, 4*256);//(第几列:从0开始,宽度为字节*256)
		sheet.setColumnWidth(1, 4*256);
		sheet.setColumnWidth(2, 6*256);
		//sheet.setDefaultColumnWidth((short)7);//默认列宽
		HSSFCellStyle style = workboot.createCellStyle();
		style.setWrapText(true);//自动换行
		style.setAlignment(HSSFCellStyle.ALIGN_LEFT);//左对齐
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 
		style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
		
		 // 背景色
		/*style.setFillForegroundColor(HSSFColor.YELLOW.index);
		style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 
		style.setFillBackgroundColor(HSSFColor.YELLOW.index); */
		
		// 设置边框
		/*style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
		style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
		style.setBorderRight(HSSFCellStyle.BORDER_THIN);
		style.setBorderTop(HSSFCellStyle.BORDER_THIN);  */
		
		HSSFFont font = workboot.createFont();
		//设置字体
		font.setFontName("宋体");
		font.setFontHeightInPoints((short)12);
		style.setFont(font);
		/*
		 * 每个sheet页都可以分页,用分页符隔开,这里每隔十条数据一分页,打印的时候a4纸能放的内容有限,是个考虑范围
		 */
		for(int i = 0; i<= mapList.size()/10; i++){
			if(i * 10 == mapList.size())
				break;
			String pageTotal = "";//总页数
			String page = String.valueOf(i+1); // 当前页
			if(mapList.size()%10 ==0){
				pageTotal = String.valueOf(mapList.size()/10);
			}else{
				pageTotal = String.valueOf(mapList.size()/10+1);
			}
			//创建每一页的排头信息
			row = sheet.createRow(sheet.getLastRowNum()+1);
			cell = row.createCell(0);
			cell.setCellStyle(style);
			cell.setCellValue("第   " + page + "   页/共   " + pageTotal + "页");
			cell = row.createCell(1);
			cell.setCellStyle(style);
			cell = row.createCell(2);
			cell.setCellStyle(style);
			//合并单元格(起始行,结束行,起始单元格,结束单元格)
			CellRangeAddress hebinhang = new CellRangeAddress(sheet.getLastRowNum(),
					sheet.getLastRowNum(),0,2);
			sheet.addMergedRegion(hebinhang);
			for(int k = i*10; k < (i+1)*10; k++){
				if( k == mapList.size()){
					break;
				}
				row = sheet.createRow(sheet.getLastRowNum()+1);
				for(int ce = 0; ce < 3; ce ++){
					cell = row.createCell(ce);
					cell.setCellStyle(style);
					//根据实际情况向单元格存值
					cell.setCellValue(!mapList.get(k).get(String.valueOf(ce)).toString().equals("") ? 
							mapList.get(k).get(String.valueOf(ce)).toString() : "(空)");
				}
			}
			//添加一个分页符
			sheet.setRowBreak(sheet.getLastRowNum());
		}
		workboot.write(new FileOutputStream(txtFilePath));
	}

最后提醒一下,这里使用的jar均为3.15,分别是poi-3.15.jar、poi-ooxml-3.15.jar、poi-ooxml-schemas-3.15.jar。因为样式方面,比如对齐方式的写法在3.15版本jar里已经不推荐使用,3.17的自然就给干掉了,至于3.17版本里对于样式的一些写法这里就不一一介绍了,做个提醒。
其实大概步骤就是:

  1. 实例workboot,创建工作簿
  2. 创建sheet页
  3. 创建样式,样式创建的顺序并没有要求,先创建出来方便后边单元格或者sheet页的添加
  4. 创建行
  5. 创建列,添加样式,存值
  6. 写入工作簿
  7. 释放
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值