POI 导出文件以文件流形式返回

POI工具类 


import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;public class PoiUtils {/*** 导出Excel* @param sheetName sheet名称* @param title 标题* @param values 内容* @param wb HSSFWorkbook对象* @return*/public static HSSFWorkbook getHSSFWorkbook(String sheetName,String []title,String [][]values, HSSFWorkbook wb){// 第一步,创建一个HSSFWorkbook,对应一个Excel文件if(wb == null){wb = new HSSFWorkbook();}// 第二步,在workbook中添加一个sheet,对应Excel文件中的sheetHSSFSheet sheet = wb.createSheet(sheetName);// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制HSSFRow row = sheet.createRow(0);// 第四步,创建单元格,并设置值表头 设置表头居中HSSFCellStyle style = wb.createCellStyle();
//        style.setAlignment(HorizontalAlignment.CENTER); // 创建一个居中格式//声明列对象HSSFCell cell = null;//创建标题for(int i=0;i<title.length;i++){cell = row.createCell(i);cell.setCellValue(title[i]);cell.setCellStyle(style);}//创建内容for(int i=0;i<values.length;i++){row = sheet.createRow(i + 1);for(int j=0;j<values[i].length;j++){//将内容按顺序赋给对应的列对象row.createCell(j).setCellValue(values[i][j]);}}return wb;}//发送响应流方法public static void setResponseHeader(HttpServletResponse response, String fileName) {try {try {fileName = new String(fileName.getBytes(),"ISO8859-1");} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}response.setContentType("application/octet-stream;charset=ISO8859-1");response.setHeader("Content-Disposition", "attachment;filename="+ fileName);response.addHeader("Pargam", "no-cache");response.addHeader("Cache-Control", "no-cache");} catch (Exception ex) {ex.printStackTrace();}}
}

导出接口
 

    @GetMapping("/exportParkOrderByPage")@ApiOperation(value = "导出订单明细信息(默认查询全部)", notes = "导出订单明细信息(默认查询全部)", response = ParkOrder.class)public void exportParkOrderByPage(@RequestParam(value = "page", required = false, defaultValue = "0") @ApiParam(required = false, defaultValue = "0", value = "当前页数,默认从0开始") Integer page,@RequestParam(value = "limit", required = false, defaultValue = "10") @ApiParam(required = false, defaultValue = "10", value = "每一页条数,默认10条") Integer limit,@RequestParam(value = "pkid", required = false) @ApiParam(required = false, value = "车场名称") String pkid,@RequestParam(value = "payWay", required = false) @ApiParam(required = false, value = "线上线下(0.线上 1.线下)") String payWay,@RequestParam(value = "orderSource", required = false) @ApiParam(required = false, value = "订单来源") String orderSource,@RequestParam(value = "userId", required = false) @ApiParam(required = false, value = "操作人") String userId,@RequestParam(value = "plateNo", required = false) @ApiParam(required = false, value = "车牌号码") String plateNo,@RequestParam(value = "orderTimeStart", required = false) @ApiParam(required = false, value = "开始订单时间") String orderTimeStart,@RequestParam(value = "orderTimeEnd", required = false) @ApiParam(required = false, value = "结束订单时间") String orderTimeEnd,HttpServletResponse response) {try {log.info("++++++++++访问/count/exportParkOrderByPage接口入参:>>>>>>pkid:" + pkid+ " payWay:" + payWay+ " orderSource:" + orderSource+ " userId:" + userId+ " plateNo:" + plateNo+ " orderTimeStart:" + orderTimeStart+ " orderTimeEnd:" + orderTimeEnd);limit = Integer.MAX_VALUE;Page<ParkOrder> requestPage = new Page<>(page, limit);Map<String, Object> requestParam = new HashMap<String, Object>();requestParam.put("pkid", pkid);requestParam.put("payWay", payWay);requestParam.put("orderSource", orderSource);requestParam.put("userId", userId);requestParam.put("plateNo", plateNo);requestParam.put("orderTimeStart", orderTimeStart);requestParam.put("orderTimeEnd", orderTimeEnd);Page<ParkOrder> parkOrderByPage = parkOrderService.getParkOrderByPage(requestPage, requestParam);List<ParkOrder> records = parkOrderByPage.getRecords();//excel标题String[] title = {"车场名称", "车牌号码", "订单编号", "金额", "已付金额", "未付金额", "折扣金额", "订单类型", "支付方式", "订单时间", "订单来源", "操作人", "备注"};//excel文件名String fileName = "订单明细信息" + System.currentTimeMillis() + ".xls";//sheet名String sheetName = "订单明细信息表";SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String[][] content = new String[records.size()][title.length];for (int i = 0; i < records.size(); i++) {//车场名称content[i][0] = records.get(i).getPkName() == null ? "" : records.get(i).getPkName().toString();//车牌号码content[i][1] = records.get(i).getPlateNo() == null ? "" : records.get(i).getPlateNo().toString();//订单编号content[i][2] = records.get(i).getOrderNo() == null ? "" : records.get(i).getOrderNo().toString();//金额content[i][3] = records.get(i).getAmount() == null ? "" : records.get(i).getAmount().toString();//已付金额content[i][4] = records.get(i).getPayAmount() == null ? "" : records.get(i).getPayAmount().toString();//未付金额content[i][5] = records.get(i).getUnPayAmount() == null ? "" : records.get(i).getUnPayAmount().toString();//折扣金额content[i][6] = records.get(i).getDiscountAmount() == null ? "" : records.get(i).getDiscountAmount().toString();//订单类型content[i][7] = "";if (records.get(i).getOrderType() != null && StrUtil.isNotBlank(records.get(i).getOrderType().toString())) {Integer orderType = Integer.valueOf(records.get(i).getOrderType().toString());switch (orderType) {case 1:content[i][7] = "临时卡缴费";break;case 2:content[i][7] = "月卡缴费";break;case 3:content[i][7] = "VIP卡缴费";break;case 4:content[i][7] = "储值卡充值";break;case 5:content[i][7] = "临时卡续期";break;case 6:content[i][7] = "储值卡缴费";break;case 12:content[i][7] = "车位预定";break;}}//支付方式content[i][8] = "";if (records.get(i).getPayWay() != null && StrUtil.isNotBlank(records.get(i).getPayWay().toString())) {Integer payType = Integer.valueOf(records.get(i).getPayWay().toString());switch (payType) {case 1:content[i][8] = "现金";break;case 2:content[i][8] = "微信";break;case 3:content[i][8] = "支付宝";break;case 4:content[i][8] = "网银";break;case 5:content[i][8] = "电子钱包";break;case 6:content[i][8] = "优免券";break;case 7:content[i][8] = "余额";break;}}//订单时间content[i][9] = records.get(i).getOrderTime() == null ? "" : dateFormat.format(records.get(i).getOrderTime());//订单来源content[i][10] = "";if (records.get(i).getOrderSource() != null && StrUtil.isNotBlank(records.get(i).getOrderSource().toString())) {Integer source = Integer.valueOf(records.get(i).getOrderSource().toString());switch (source) {case 1:content[i][10] = "微信";break;case 2:content[i][10] = "APP";break;case 3:content[i][10] = "中心缴费";break;case 4:content[i][10] = "岗亭缴费";break;case 5:content[i][10] = "管理处";break;case 6:content[i][10] = "第三方平台";break;}}//操作人content[i][11] = records.get(i).getUserId() == null ? "" : records.get(i).getUserId().toString();//备注content[i][12] = records.get(i).getRemark() == null ? "" : records.get(i).getRemark().toString();}//创建HSSFWorkbookHSSFWorkbook wb = PoiUtils.getHSSFWorkbook(sheetName, title, content, null);//响应到客户端PoiUtils.setResponseHeader(response, fileName);OutputStream os = response.getOutputStream();wb.write(os);os.flush();os.close();log.info("++++++++++访问/count/exportParkOrderByPage接口调用成功>>>>>>");} catch (Exception e) {e.printStackTrace();log.error("++++++++++访问/count/exportParkOrderByPage接口系统异常原因 : +++++++++" + e.getMessage());} catch (Throwable throwable) {throwable.printStackTrace();log.error("++++++++++访问/count/exportParkOrderByPage接口系统异常原因 : +++++++++" + throwable.getMessage());}}

前端操作
 

    handleDownload() {this.downloadLoading = trueexportParkOrderByPage(this.listQuery).then(res=>{console.log(res)var blob = new Blob([res], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'}); //application/vnd.openxmlformats-officedocument.spreadsheetml.sheet这里表示xlsx类型var downloadElement = document.createElement('a');var href = window.URL.createObjectURL(blob); //创建下载的链接downloadElement.href = href;downloadElement.download = '订单明细.xls'; //下载后文件名document.body.appendChild(downloadElement);downloadElement.click(); //点击下载document.body.removeChild(downloadElement); //下载完成移除元素window.URL.revokeObjectURL(href); //释放掉blob对象 this.downloadLoading = false;})},

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Json串和java对象进行转时

json-lib-xxx.jarezmorph-xxx.jar //>依赖包 JsonConfig config new JsonConfig();//有选择性的过滤掉一些属性值 JSONUtils.getMorpherRegistry().registerMorpher( new DateMorpher(new String[] { "yyyy-MM-dd" }));//注册一个json转为java.util.date的日期格…

Mybatis Integer类型参数值为0时判断为空、空字符串不通过

根据状态查询是&#xff0c;由于status是Integer类型&#xff0c;所以当前状态为0时&#xff0c;变成了查询了所有的状态信息。 <if test"requestParam.status ! null and requestParam.status ! ">and s.status #{requestParam.status} </if> 原因&a…

BZOJ 3391: [Usaco2004 Dec]Tree Cutting网络破坏(搜索)

这道直接遍历一遍求出每个点的子节点数目就行了 CODE&#xff1a;#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;#define maxn 50010int b[maxn],q[maxn],id[maxn],ans[maxn];bool cmp(int x,int y){re…

Fast Matrix Operations

uva11992:http://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem3143 题意&#xff1a;给你n*m的矩阵初始化的时候矩阵里面的元素全部是0&#xff0c;对于这个矩阵有3中操作。 1 x1 y1 x2 y2 v 把&#xff08;x1 y1 x2…

linux ll命令无效

1.编辑~/.bashc vim ~/.bashc 若vi/vim命令无效&#xff0c;参考 bash: vi: command not found/bash: vim: command not found 2.重新执行刚修改的初始化文件 source ~/.bashc

jquery不同版本冲突导致低版本功能不能用

oConflict() 方法让渡变量 $ 的 jQuery 控制权。 该方法释放 jQuery 对 $ 变量的控制。 使用方法&#xff1a; var jq $.noConflict();//转换控制权 jq(document).ready(function () { jq("#outside").click(function () {你的操作...... }); }); });转载于:https:/…

struts2+jquery 实现ajax登陆

一、新建一个web项目&#xff1a;test,配置好struts2的环境(详细配置见&#xff1a;http://www.cnblogs.com/wuweidu/p/3841297.html) 导入Jquery的js文件到项目 二、在com.action包下&#xff0c;新建一个loginAction.java loginAction.java的代码如下 package com.action;imp…

hdu 2026 首字母变大写

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid2026 题目大意&#xff1a;将一个英文句子&#xff0c;每个单词第一个首字母变大写。 1 #include <stdio.h>2 int main (void)3 {4 int i;5 char ch[100];6 while(gets(ch))7 {8 for (i0; c…

Docker Kafka 单机版安装

一、安装 下载library/zookeeper并运行 docker run --name zookeeper -d -p 2181:2181 -v /etc/localtime:/etc/localtime library/zookeeper 测试zookeeper端口是否通wget IP:2181 下载wurstmeister/kafka并运行 docker run -d --name kafka -p 9092:9092 --link zookeeper…

HDU1429胜利大逃亡(续)HDU 1885 Key Task BFS+状态压缩+水

HDU1429 只有10把钥匙 1<<10足够了 标记用三维数组 用Linux好不习惯 继续克服&#xff5e; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> #include <malloc.h> #include <ctype.h> #include &l…

Docker 安装nginx,并挂载文件

创建挂载所需目录&#xff1a; mkdir /test/server/nginx/{conf,logs,html,conf.d} /test/server/nginx/conf创建nginx.conf文件&#xff0c;并编辑: user nginx; worker_processes 1;error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;events {wor…

http解码-5

http://www.freebuf.com/articles/web/18084.html (1) 在 前端安全技术中常见的编码绕过技术利用的就是不同系统间的编码位宽(addslashes()楼哦的那个)&#xff0c;不同编码的解码顺序(htmlParserjavascriptParser的解码顺序)&#xff0c;不同的解码规则(unicode->ascii转换…

IllegalArgumentException:argument type mismatch

Exception nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property id of class com.wzq.test.demo.entity.Fee with value 1211518556674199553Cause:java.lang.IllegalArgumentException: argument type mismatch 场景: 添加不传ID使…

hadoop家族的各个成员

这篇文章不提原理&#xff0c;讲讲hadoop及其周边项目的作用。 hadoop这个词已经流行好多年了&#xff0c;一提到大数据就会想到hadoop&#xff0c;那么hadoop的作用是什么呢&#xff1f; 官方定义&#xff1a;hadoop是一个开发和执行处理大规模数据的软件平台。核心词语是平台…

ArrayList 源码分析

介绍 ArrayList 是一个数组队列&#xff0c;相当于 动态数组。与Java中的数组相比&#xff0c;它的容量能动态增长。 结构 ArrayList继承于AbstractList&#xff0c;实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。如下图&#xff1a; public class Arra…

Poj 1556 The Doors 计算几何+最短路

其实本题非常的无脑&#xff0c;无脑拍完1A&#xff0c;写到blog里只因为TM无脑拍也拍了很久啊 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostr…

String equals()方法 源码分析

public boolean equals(Object anObject) {// :比较的引用类型&#xff0c;比较的是地址值是否相同if (this anObject) { //地址值相等&#xff0c;返回truereturn true;}// instanceOf判断一个对象是不是某个类型的实例if (anObject instanceof String) {String anotherStrin…

Google,真的要离我们而去吗?

Google,真的要离我们而去吗&#xff1f; 好怀念&#xff0c;真正要解决问题&#xff0c;还得搜google!转载于:https://www.cnblogs.com/fuyujian/p/3852444.html

Oracle 位图索引

内容简介: 1.位图索引 1.1位图索引使用注意事项; 1.2 使用位图索引; 1.3 位图索引对DML操作的影响; 2.位图连接索引 2.1 明确需求后使用位图索引; 2.1创建位图连接索引的注意事项: 1.位图索引: 1.1位图索引使用注意事项: ❏ 一般适用于低基数列; ❏ 适合数据仓库; ❏ 对于启用位…

oracle服务器和客户端字符集的查看和修改

一、什么是oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储&#xff0c;处理&#xff0c;检索数据。它使数据库工具&#xff0c;错误消息&#xff0c;排序次序&#xff0c;日…