超简单的excel数据导出(未用模板,可设置style)

        <dependency>
	        <groupId>org.apache.poi</groupId>
		    <artifactId>poi</artifactId>
		    <version>4.1.2</version>
		</dependency>
		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi-ooxml</artifactId>
		    <version>4.1.2</version>
		</dependency>

以上是我使用的poi依赖版本 

1. 首先写个导出Excel工具类

(为了简单快捷,有点简陋,列宽未设置,格式未设置,例如日期格式)

参考地址:使用Java导出Excel表格并由浏览器直接下载 - it610.com  在参考地址原代码中做了两处Bug修改

package com.epson.esl.rms.excel;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import javax.servlet.http.HttpServletResponse;

import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.List;

public class ExcelUtil {
	/**
	 * 生成Excel表格
	 * 
	 * @param sheetName sheet名称
	 * @param titleList 表头列表
	 * @param dataList  数据列表
	 * @return HSSFWorkbook对象
	 */

	public static HSSFWorkbook createExcel(String sheetName, List<String> titleList, List dataList,
			HttpServletResponse response, String fileName) {
		// 创建HSSFWorkbook对象
		HSSFWorkbook wb = new HSSFWorkbook();
		// 创建sheet对象
		try {
			HSSFSheet sheet = wb.createSheet(sheetName);
			// 在sheet里创建第一行,这里即是表头
			HSSFRow rowTitle = sheet.createRow(0);

			// 写入表头的每一个列
			for (int i = 0; i < titleList.size(); i++) {
				// 创建单元格
				rowTitle.createCell(i).setCellValue(titleList.get(i));
				sheet.setColumnWidth(i, 30 * 256); //在cell层次设置列宽
				rowTitle.getCell(i).getCellStyle().setWrapText(true); //设置自动换行,否则内容含有\n也必须鼠标双击才能手动换行
			}

			// 写入每一行的记录
			for (int i = 0; i < dataList.size(); i++) {
				// 创建新的一行,递增
				HSSFRow rowData = sheet.createRow(i + 1);
				rowData.setHeight((short) (2 * 512));//在cell层次设置行高
				// 通过反射,获取POJO对象
				Class cl = dataList.get(i).getClass();
				// 获取类的所有字段
				Field[] fields = cl.getDeclaredFields();
				for (int j = 0; j < fields.length; j++) {
					fields[j].setAccessible(true);//反射时可以操作私有成员属性的值,如果不设置只能获取public类型属性还有可能抛禁止访问异常
					// 创建单元格
					rowData.createCell(j).setCellValue(
							null == fields[j].get(dataList.get(i)) ? "" : fields[j].get(dataList.get(i)).toString());
				}
			}
			// 输出Excel文件
			OutputStream output = response.getOutputStream();
			response.reset();
			// 中文名称要进行编码处理
			response.setHeader("Content-disposition",
					"attachment; filename=" + new String(fileName.getBytes("GB2312"), "ISO8859-1") + ".xls");
			response.setContentType("application/msexcel");
			wb.write(output);
			output.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return wb;
	}
}

2 . 编写Controller的API

/* 导出记录到Excel并且下载 */
	@RequestMapping("exportExcel")
	public void exportExcel(@RequestParam(value = "dn") String dn, @RequestParam(value = "itemCode") String itemCode,
			@RequestParam(value = "scanDateTimeStart") String scanDateTimeStart, @RequestParam(value = "scanDateTimeEnd") String scanDateTimeEnd
			,HttpServletRequest request, HttpServletResponse response) {
		
//4参数是页面查询的条件

		 try {
		        //文件名
		        String fileName = "历史记录";
		        //sheet名
		        String sheetName = "记录";

		        //表头集合,作为表头参数
		        List<String> titleList = new ArrayList<>();
		        titleList.add("编号");
		        titleList.add("数量");
		        titleList.add("时间");
		        titleList.add("用户");
		        titleList.add("异常原因");

		        //数据对象,从数据库中得到
		        List<Task> tasks = taskService.searchRecord(dn, itemCode, scanDateTimeStart, scanDateTimeEnd);
		        //调取导出Excel工具类中封装的方法,传入相应的参数
		        ExcelUtil.createExcel(sheetName,titleList, tasks,response,fileName);
		      //  request.setAttribute("msg",  "导出成功");
	        }catch(Exception ex){
	            ex.printStackTrace();
	            //request.setAttribute("msg",  "导出失败");
	        }
	}
	

页面貌似只能使用submit 、从定向,无法使用ajax下载文件,以下是原ajax请求修改成重定向至导出数据Url

window.location.href = "/exportExcel?dn="+dn+"&itemCode="+itemCode+"&scanDateTimeStart="+scanDateTimeStart+"&scanDateTimeEnd="+scanDateTimeEnd;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往事不堪回首..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值