Springboot分布式,excel导出,运用POI导出,前端用的jsp

摘要:
“”:范围。getScopeNo());dataRow.createCell(1).setCellValue(scope.getRfidNo()==null?“”:范围。getRfidNo());dataRow.createCell(2).setCellValue(scope.getScopeInnerNo()==null?“”:范围。getScopeInnerNo());dataRow.createCell(3).setCellValue(scope.getRfidNo()==null?“”:范围。getRfidNo());dataRow.createCell(4).setCellValue(EweConstant.EWE_ARRANGEMENT_SCOPE_TYPE_CN.get(SCOPE.getScopeType()));dataRow.createCell(5).setCellValue(scope.getScopeName()==null?“”:范围。getScopeName());dataRow.createCell(6).setCellValue(scope.getCategory()==null?“”:范围。getCategory());dataRow.createCell(7).setCellValue(scope.getManufacture()==null?

1.pom.xml
添加POI架包


org.apache.poi
poi-ooxml
3.15


org.apache.poi
poi
3.15

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

2.java代码:
@ApiOperation(value = "内窥镜信息,excel导出")
@RequestMapping(value="/excel",method = RequestMethod.POST)
@RequiresPermissions("ewe:eweendscope:read")
@ResponseBody
public String excel(HttpServletResponse response,@RequestBody Pager pager)throws IOException {
response.setCharacterEncoding("UTF-8");
Map<String, Object> result = null;
List list=new ArrayList();
try {
PagerUtil.handleReqParam(pager, upmsApiService);
result = eweEndscopeService.list(pager);
list= (List) result.get("rows");
System.out.println(list);
//创建excel文件
HSSFWorkbook wb = new HSSFWorkbook();
//创建sheet页
HSSFSheet sheet = wb.createSheet("内窥镜信息表");
//创建标题行
HSSFRow titleRow = sheet.createRow(0);

        titleRow.createCell(0).setCellValue("SN码(全球唯一标识)");
        titleRow.createCell(1).setCellValue("内窥镜RFID");
        titleRow.createCell(2).setCellValue("内窥镜编号");
        titleRow.createCell(3).setCellValue("卡片序列号");
        titleRow.createCell(4).setCellValue("内窥镜类型");
        titleRow.createCell(5).setCellValue("内窥镜名称");
        titleRow.createCell(6).setCellValue("型号");
        titleRow.createCell(7).setCellValue("品牌");
        titleRow.createCell(8).setCellValue("价格");
        titleRow.createCell(9).setCellValue("组织编号 ");
        titleRow.createCell(10).setCellValue("登记时间");
        titleRow.createCell(11).setCellValue("使用状态");
        //遍历将数据放到excel列中
        for (EweEndscopeView scope : list) {
            HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum()+1);
            dataRow.createCell(0).setCellValue(scope.getScopeNo()==null?"":scope.getScopeNo());
            dataRow.createCell(1).setCellValue(scope.getRfidNo()==null?"":scope.getRfidNo());
            dataRow.createCell(2).setCellValue(scope.getScopeInnerNo()==null?"":scope.getScopeInnerNo());
            dataRow.createCell(3).setCellValue(scope.getRfidNo()==null?"":scope.getRfidNo());
            dataRow.createCell(4).setCellValue(EweConstant.EWE_ARRANGEMENT_SCOPE_TYPE_CN.get(scope.getScopeType()));
            dataRow.createCell(5).setCellValue(scope.getScopeName()==null?"":scope.getScopeName());
            dataRow.createCell(6).setCellValue(scope.getCategory()==null?"":scope.getCategory());
            dataRow.createCell(7).setCellValue(scope.getManufacture()==null?"":scope.getManufacture());
            dataRow.createCell(8).setCellValue(scope.getPrice()==null?"":scope.getPrice().toString());
            dataRow.createCell(9).setCellValue(scope.getUpmsOrganizationId());
            dataRow.createCell(10).setCellValue(scope.getCreateTime());
            dataRow.createCell(11).setCellValue(EweConstant.EWE_ENDSCOPE_STATUS_CN.get(scope.getScopeStatus()));

        }
           // 设置下载时客户端Excel的名称

// String filename =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + ".xls";
// response.setContentType("application/vnd.ms-excel");
// response.setHeader("Content-disposition", "attachment;filename=" + filename);

        // 设置下载时客户端Excel的名称   (上面注释的改进版本,上面的中文不支持)

// response.setContentType("application/octet-stream;charset=utf-8");
// response.setHeader("Content-Disposition", "attachment;filename="
// + new String("内窥镜信息".getBytes(),"iso-8859-1") + ".xls");
// OutputStream ouputStream = response.getOutputStream();
** // wb.write(ouputStream);**
** // ouputStream.flush();**
** // ouputStream.close();**
改为
将response的contentType改为application/x-download
response.setCharacterEncoding("utf-8");
response.setContentType("application/x-download");
String filedisplay = "product.xls";
filedisplay = URLEncoder.encode(filedisplay, "utf-8");
response.addHeader("Content-Disposition", "attachment;filename=" + filedisplay);

        OutputStream ouputStream = response.getOutputStream();
    wb.write(ouputStream);
    ouputStream.flush();
    ouputStream.close();

// //新建文件输出流
//FileOutputStream fOut=new FileOutputStream("C:workspaceookdata1.xls");
//将数据写入Excel
//wb.write(fOut);
//fOut.flush();
//fOut.close();
//return "C:workspaceookdata1.xls";
} catch (Exception e) {
LOGGER.warn("EweEndscopeController list 异常", e);
return "";
}

我用的直接生成file文件,如果用response生成excel文件流,在前端不好转。因为我这个系统前端技术用的老,用的是jsp和bootstarp。因为领导觉得页面上的js导出只能导出当前页面,所以想改成java导出。
说说用用response生成excel文件流我遇到的问题:因为项目的前端查询用的是(table.bootstrapTable后台接收的是json对象,而且需要将查询出来的导出。所以form表单这排除了。a标签也排除了。我就想着在前端转换,但是转换出的excel是乱码,就失败了。 在这列出,XMLHttpRequest js请求post //后台生成excel流文件,前端需要用herf链接过 <%--url = "){basePath}/manage/eweendscope/excel";--%>
//用xmlhttpRequest请求成功但是要将responseType=blob;就是告诉服务器我要接收的是blob字节流,这样才不会前端接受成乱码
url = "${basePath}/manage/eweendscope/excel";
xhr = new XMLHttpRequest();
xhr.open("post", url, true);
var data;
xhr.setRequestHeader("Content-Type", "application/json");
xhr.responseType = 'blob';//告诉服务器我要的数据为blob
var str = JSON.stringify(allData);
xhr.onload = function (oEvent) {
var content = xhr.response;
var elink = document.createElement('a');
elink.download = "内窥镜.xls";
elink.style.display = 'none';
var blob = new Blob([content]);
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
};
xhr.send(str);

ajax请求方式有点鸡肋,并且是乱码
写在按钮的调用方法中:
(.ajax({ url : "){basePath}/manage/eweendscope/excel",// 后台请求的数据
contentType:'application/x-www-form-urlencoded', // 数据格式
responseType: 'blob',
type : "post",// 请求方式
async : false,// 是否异步请求
headers: {
'Content-Type': 'application/json'
},
data : JSON.stringify(allData),// data是传给后台的字段,后台需要哪些就传入哪些
success : function(datas) { // 如果请求成功,返回数据。
// returndata = datas;
// console.log(datas.toString());
// alert("打印成功")
downloadFile(datas);
},
})
function downloadFile(data){
if (!data) {
return;
}
var url = window.URL.createObjectURL(new Blob([data]))
var link = document.createElement('a');
link.style.display = 'none';
link.href = url;
link.setAttribute('download', 'excel1111.xls');
document.body.appendChild(link);
link.click();
}

总结:excel后台好写,但是前端接收不好写,可能是我第一次前后端一起写而且还要有查询条件。

免责声明:文章转载自《Springboot分布式,excel导出,运用POI导出,前端用的jsp》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇遍历系统中加载的驱动程序以及通过设备对象指针获取设备对象名称四色原型概念辨析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JSTL 标签库详细介绍资料

前言从jsp 1.1规范开始,jsp就支持在jsp中使用自定义标签了,自定义标签的广泛使用造成了程序员重复定义,这样就促成了jstl(javaserver pages standard tag library)的诞生。因为工作中需要用到jstl,但网上却苦于找不到有关jstl的中文资料,所以就有了这篇文章。jstl简介jstl是一个不断完善的开放源代码的j...

tomcat为什么要禁用session?

转载请标明出处:http://blog.csdn.net/goldenfish1919/article/details/47829755 我们先来做一个实验,用jmeter对tomcat下的一个jsp页面做压測: (1)jsp的内容很easy,1.jsp: <%@ page language="java" pageEncoding="utf-8"...

POI转换word doc文件为(html,xml,txt)

在POI中还存在有针对于word doc文件进行格式转换的功能。我们可以将word的内容转换为对应的Html文件,也可以把它转换为底层用来描述doc文档的xml文件,还可以把它转换为底层用来描述doc文档的xml格式的text文件。这些格式转换都是通过AbstractWordConverter特定的子类来完成的。  1 转换为Html文件 将doc文档转换...

reponse.getWriter和JSP中的out.printe的区别;

两者的主要区别:1.内置对象out的类型是JspWriter;response.getWrite()返回的类型是PrintWriter;out和response.getWriter的类不一样,一个是JspWriter,另一个是java.io.PrintWriter。 2. 获取方式不同:JspWriter是JSP的内置对象,直接使用即可,对象名out是保...

IntelliJ IDEA安装及jsp开发环境搭建

一、前言 现在.net国内市场不怎么好,公司整个.net组技术转型,就个人来说还是更喜欢.net,毕竟不是什么公司都像微软一样财大气粗开发出VS这样的宇宙级IDE供开发者使用,双击sln即可打开项目,一直想吐槽为嘛java项目只能import。昨天一路踩坑,花了一整天的时间搭建好jsp的开发环境,特此记录下安装过程中一些注意的问题以及解决方案。整个过程槽点...

Java常考面试题

Java常考面试题,整理自牛客网和程序员面试宝典,有的题不太好。 1. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 答:Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自...