使用Hutool从前端导出数据为excel详解

使用Hutool从前端导出数据为excel详解

1. 导包

hutool默认不引入poi包,所以需要用户自行引入poi包

推荐引入poi-ooxml,这个包会自动关联引入poi包,且可以很好的支持Office2007+的文档格式

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>${poi.version}</version>
</dependency>

如果需要使用Sax方式读取Excel,需要引入以下依赖:

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>${xerces.version}</version>
</dependency>

此外,还得导入commons-math3-3.6.1.jar,否则会报错:java.lang.NoClassDefFoundError: org/apache/commons/math3/util/ArithmeticUtils

**commons-math3.3.6.1.jar下载链接:**http://kk04.cn/f-6364.html

**poi4.1.2下载链接:**https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-4.1.2-20200217.zip

下载两个包之后请自行导入项目中

代码

1. jsp页面
		<a id="export" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-export',plain:true">导出为excel</a>

<script>
//导出为excel表格
			$("#export").click(function () {
				location ="partisan/exportAllUser.action";
			});
</script>
2. Controller层
@RequestMapping("exportAllUser")
	public void exportAsExcel(HttpServletResponse response)
	{
		partisanService.exportexcel(response);

	}
3. Service层
//导出为excel表格
	public void exportexcel(HttpServletResponse response) {
        //查找需要导出的数据
		List<Partisan> partisans = partisanMapper.findAl();
		// 通过工具类创建writer,默认创建xls格式
		ExcelWriter writer = ExcelUtil.getWriter();
		//给列设置别名
		writer.addHeaderAlias("name", "姓名");
		writer.addHeaderAlias("gender", "性别");
		writer.addHeaderAlias("telephone", "电话");
		writer.addHeaderAlias("address", "地址");
		writer.addHeaderAlias("partisan", "党派");
		writer.addHeaderAlias("join_time", "加入时间");
		writer.addHeaderAlias("school", "学校");
		// 设置标题样式
		StyleSet style = writer.getStyleSet();
		CellStyle headCellStyle = style.getHeadCellStyle();
		//水平居中
		headCellStyle.setAlignment(HorizontalAlignment.CENTER);
		//垂直居中
		headCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		//设置内容字体
		Font font = writer.createFont();
		//加粗
		font.setBold(true);
		//设置标题字体大小
		font.setFontHeightInPoints((short)12);
		headCellStyle.setFont(font);
		//设置每列宽度,-1为全部列
		writer.setColumnWidth(-1,15);
		//设置行的默认高度
		writer.setDefaultRowHeight(20);
		
		writer.write(partisans, true);

		//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
		String fileName = "partidanInfo";
		//out为OutputStream,需要写出到的目标流
		ServletOutputStream out = null;
		try {
			//response为HttpServletResponse对象
			response.setContentType("application/vnd.ms-excel;charset=utf-8");
			//设置Http响应头告诉浏览器下载这个附件
			response.setHeader("Content-Disposition", "attachment;Filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xls");
			response.setHeader("Content-Transfer-Encoding", "binary");
			out = response.getOutputStream();
			System.out.println(out.toString());
			writer.flush(out, true);
			System.out.println("导出成功");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 关闭writer,释放内存
			writer.close();
		}
//此处记得关闭输出Servlet流
		IoUtil.close(out);

	}
4. 可能出现的错误:
1. java.lang.NoClassDefFoundError: org/apache/commons/math3/util/ArithmeticUtils

原因:未导入commons-math3.3.6.1,有可能是导入包不成功,没用加到项目的librarty中,只是单纯的粘贴到lib目录下,或者因为包版本问题

2. 导出的excel表格打不开,提示文件名或文件拓展名不符
  • (1)writer和out流没有正确关闭,请在代码末尾的finally块增加关闭。
  • (2)扩展名不匹配。getWriter默认生成xls,Content-Disposition中也应该是xls,只有getWriter(true)时才可以使用xlsx
  • (3)Maven项目中Excel保存于ClassPath中(src/main/resources下)宏替换导致被破坏,解决办法是添加filtering(参考:https://blog.csdn.net/qq_42270377/article/details/92771349)
  • (4)Excel打开提示文件损坏,WPS可以打开。这是Excel的安全性控制导致的,解决办法见:https://blog.csdn.net/zm9898/article/details/99677626
5.参考链接
  1. https://www.hutool.cn/docs/#/poi/%E6%A6%82%E8%BF%B0
  2. https://apidoc.gitee.com/loolly/hutool/cn/hutool/poi/excel/ExcelWriter.html
  3. https://blog.csdn.net/wen_1108/article/details/106521502
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值