Java根据模板生成excel并下载

需要用到的jar包有freemarker-2.3.18.jar,freemarker-util-0.0.1-SNAPSHOT.jar,jxl-2.6.10.jar,jxl-report-1.0.jar,这些网上都有,可以去找

来吧,直接上干货。excel模板如图:



很容易理解,需要填充的内容用EL表达式替代即可。

上代码吧:

                // 生成Excel
		ReportEnginer enginer = new ReportEnginer();
		String modelPath = request.getServletContext().getRealPath("/")
				+ "/static/model/验收单模板.xls"; //模板的路径
		InputStream inputStream = new FileInputStream(new File(modelPath));
//下载有两种方式,1.先生成excel存到服务器,再从服务器下载下来 2.直接导出excel

先来第一种:

//第一步,先存到服务器

                String path = "";//这个是服务器上保存excel的路径
		File dir = new File(path);
		if (!dir.exists()) {// 判断路径是否存在
			dir.mkdirs(); // 可以在不存在的目录中创建文件夹
		}
		path += "test.xls"; // excel的文件名
		OutputStream outputStream = new FileOutputStream(new File(path));
		try {
			enginer.excute(inputStream, map, outputStream);
		} catch (Exception e) {
			e.printStackTrace();
		}
		inputStream.close();
		outputStream.close();
//第二步,下载
try {
                // path是指欲下载的文件的路径。
File file = new File(path);
// 取得文件名。
String filename = file.getName();
// 设置响应头,控制浏览器下载该文件
response.setHeader("content-disposition", "attachment;filename="
URLEncoder.encode(filename, "UTF-8"));
// 读取要下载的文件,保存到文件输入流
FileInputStream in = new FileInputStream(pdfPath);
// 创建输出流
OutputStream out = response.getOutputStream();
// 创建缓冲区
byte buffer[] = new byte[1024];
int len = 0;
// 循环将输入流中的内容读取到缓冲区当中
while ((len = in.read(buffer)) > 0) {
// 输出缓冲区的内容到浏览器,实现文件下载
out.write(buffer, 0, len);
}
// 关闭文件输入流
in.close();
// 关闭输出流
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
至此,第一种就搞定了.第二种:
ReportEnginer enginer = new ReportEnginer();
InputStream inputStream = new FileInputStream(new File(excelTempletePath));
response.setContentType("application/vnd.ms-excel");
OutputStream outputStream = response.getOutputStream();
enginer.excute(inputStream, map, outputStream);
inputStream.close();
outputStream.close();
里面map的内容如下:

{    "C_ID": 9,    "C_NUM": "YS1709040001",    "C_NAME": "在线办公平台",    "C_CODE": "HT0010",    "C_AMOUNT": 700000,    "C_DATE": "2017-05-24",    "C_APPLICANTNAME": "Test",    "C_DEPT": "南天门",    "C_STATE": "14",    "C_SUPPLIER": "供应商",    "C_BUYNUMBER": " ",    "eqList": [        {            "E_ID": 9,            "E_NAME": "笔记本电脑",            "E_ITEMTYPE": "通用设备、专业设备",            "E_ITEM": "其它计算机设备及软件",            "E_MODEL": "型号",            "E_TECHNICALPARAMETERS": "技术参数",            "E_NOTE": "备注",            "E_FACTORY": "生产厂家",            "E_BRAND": "品牌",            "E_UNITPRICE": 6000,            "E_NUM": 2,            "TOTALPRICE": 12000,            "ROWNUM": 1,            "C_BUYNUMBER": " ",            "P_ISIMPORT": "是",            "installList": [                {                    "L_SERIAL_NUM": 1,                    "L_FACTORY_NO": "154131",                    "L_INSTALLATIONLOCATION": "111"                },                {                    "L_SERIAL_NUM": 2,                    "L_FACTORY_NO": "1541444",                    "L_INSTALLATIONLOCATION": "222"                }            ]        }    ],    "A_DELIVERYDATE": "2017-09-04",    "A_DELIVERYADDRESS": "丰盛的覅",    "A_ACCEPTANCEDATE": "2017-09-05",    "A_ACCEPTANCEADDRESS": "第三方",    "acceptExpertList": [        {            "E_ID": 0,            "E_NAME": "test",            "E_IDCARD": "test",            "E_UNIT": "电子工程学院",            "E_POSITION": "fsdgfdsgdf",            "E_TITLE": "aa1",            "E_CONTACTPHONE": "02885013835",            "E_PHONE": "18583929312",            "E_EAMIL": "18688888888@qq.com",            "E_ADDRESS": "成都",            "E_PROFESSIONAL": "在不安也很近黄金时代",            "B_NAME": "校内",            "ROWNUM": 1        },        {            "E_ID": 1,            "E_NAME": "pingzong",            "E_IDCARD": "pingzong",            "E_UNIT": "电子工程学院",            "E_POSITION": "fe",            "E_TITLE": "fes",            "E_CONTACTPHONE": "028-85465853",            "E_PHONE": "13161519203",            "E_EAMIL": "efw@qq.com",            "E_ADDRESS": "fewfaw",            "E_PROFESSIONAL": "fafeaf",            "B_NAME": "校内",            "ROWNUM": 2        }    ]}

就是这些了,上一个最后导出来excel的图:

     

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值