首页 > 其他分享 >jsp 导出excel

jsp 导出excel

时间:2023-05-08 17:11:06浏览次数:51  
标签:文件 map 导出 excel HTML jsp JSP

1.情景展示

如上图所示,该页面上的表格统计内容,需要增加一个导出功能,即:

将表格内容导出Excel当中。

如何实现?

2.具体分析

2.1传统解决方案

针对excel导出,有两种解决方式。

思路一:前端导出

如果仅仅是导出当前页数据的话,我们完全可以不与后台进行交互。

因为现有数据已经拿到了,只需要前端将HTML片段转成EXCEL文件,完成下载就可以了。

思路二:后端导出

由于前端往往展示的只是当前页的内容,而实际需求往往是,我们要导出所有符合查询条件的数据。

这样一来,我们就只能通过后端来生成EXCEL文件,并且,将该文件以流的形式返回给前端。

浏览器检测到,会自动下载服务器返回的excel文件。

2.2另类解决办法

如果你的页面使用的不是HTML而是JSP进行开发的话,我们完全可以使用JSP来实现数据转EXCEL的操作。

这样一来,就大大减轻了后端的工作量,也比较省心。

3.解决方案

前提:页面的展示使用JSP进行开发,而不是HTML。

具体实现流程如下:

JS代码

//导出
function exportExcel(){
    var begin = document.getElementById("begindata").value;
    var end = document.getElementById("enddata").value;
    var myselect = document.getElementById("ORG_CODE");
    var orgcode = myselect.options[myselect.selectedIndex].value;
    var param = "begindata=" + begin +"&enddata=" + end + "&ORG_CODE=" + orgcode
    window.open(baseUrl + "/ycyl/xd/api/orgDateExcel.do?" + param, "_self");
}

页面导出按钮,调用该函数,使用js打开一个新的标签,发送获取数据的请求。

HTML代码

<input id="exportButton" onm ouseover="javascript:this.className='ButtonOver'" onm ouseout="javascript:this.className='Button'"
    value="导出" class="Button" type="button" onclick="javascript:exportExcel()" />

Controller代码

<action name="orgDataExcel" class="ycyl.web.actions.xd.XdApiAction" method="viewListOrgTsCount">
    <result name="success" type="dispatcher">/ycyl/xd/jk/statistics/orgExcel.jsp</result>
</action>

这里使用的是struts2当做控制层。

该请求经过后台调用viewListOrgTsCount()方法后,会自动转发到orgExcel.jsp页面。 

JAVA代码(viewListOrgTsCount方法具体内部实现)

public String viewListOrgTsCount() {
    try{
        Map map = WebUtils.getParameterMapWithPage();
        String ORG_CODE = map.get("ORG_CODE").toString();
        String[] ORG_CODES = ORG_CODE.split(",");	
        map.put("ORG_CODES", ORG_CODES);
        
        if(!map.get("enddata").toString().isEmpty() ){
            String begin = map.get("begindata").toString();
            String end = map.get("enddata").toString();
            map.put("begin", begin + " 00:00:00");
            map.put("abort", end + " 23:59:59");
        }
        
        List<Map> list = boXdApi.getOrgXDTsCount(map);
        // 返回的数据
        model.put("data", list);
        
        // 获取到Response对象
        HttpServletResponse response = WebUtils.getResponse();
        // 设置文件名
        String wjm = "orgcode.xls"; 
        // 告诉浏览器,返回的是.xls格式数据,以及文件的字符集
        response.setContentType( "application/vnd.ms-excel;charset=UTF-8");
        // 告诉浏览器,该文件的文件名
        response.setHeader("content-disposition","attachment; filename=" +wjm );
        
    } catch (Exception e) {
        this.code = -1;
        this.msg = e.getMessage();
        this.expMsg = getExceptionMessage(e);
        log.error(e.getMessage());
    }
    return "success";
}

JSP代码

<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
    <head xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel">
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name=ProgId content=Excel.Sheet>
        <meta name=Generator content="Microsoft Excel 11">
        <link rel=File-List href="Book1.files/filelist.xml">
        <link rel=Edit-Time-Data href="Book1.files/editdata.mso">
        <link rel=OLE-Object-Data href="Book1.files/oledata.mso">
        <title>机构统计数据导出</title>
        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    </head>
    <body>
    	<table cellspacing="0" cellpadding="1" border="0" width="100%" height="100%">
    		<tbody>
    			<tr align="center">
					<td>医疗机构</td>
					<td>总数</td>
				</tr>
				<c:forEach var="row" items="${model.data}" varStatus="s">
				<tr align="center">
					<td>${row.ORGNAME}</td>
					<td>${row.COUNT}</td>
				</tr>
				</c:forEach>
    		</tbody>
    	</table>
    </body>
</html>

当控制层,跳转到orgExcel.jsp页面时,所携带的数据,会回填到该页面。

最后,经tomcat将jsp转servlet,响应给浏览器的将是html网页。

而,我们已经通过后台Response,告诉浏览器它是一个excel文件,浏览器将自动将该网页当做一个EXCEL文件来下载。

3.测试

我们来到页面上,点击导出按钮,浏览器会自动下载一个excel格式的文件。

我们打开它,如果你是用的微软的excel工具打开,就会报如下错误:

但是,如果使用的是WPS打开的话,不会报错。

点击“是” ,就能正常打开啦。

4.扩展

这个XLS格式的excel文件,其实是一个HTML网页。

我们一起来看一下。

选中刚才下载的该文件,右键使用Notepad++打开。 

我们可以看到,这完全就是一个html网页。

只不过是将JSP相关的代码给剔除了(JSP-->SERVLET-->HTML)。

需要说明的有三点:

第一,关于JSP页面。

<HEAD>标签里面的内容,需要全部携带。

不要使用外部CSS样式,即使用了,导出的EXCEL文件,样式就是默认样式,因为在网页当中,它可以获取到服务器的外部样式文件,当你下载到本地后,将无法引用服务器的CSS文件。

使用纯粹的HTML标签和属性就可以了。

最简单的方式,就是:

只将<BODY>标签当中内容,删掉,替换成你的HTML片段就可以啦。

第二点,关于控制层。

如果,你不想在控制层添加response对象,也是可以的。

可以在JSP头部添加小脚本:

<%
    response.setContentType("application/vnd.ms-excel;charset=UTF-8");
	response.setHeader("Content-disposition","attachment; filename=orgcode.xls");
%>

其实现效果是一样的。

第三,仅支持XLS格式。 

使用JSP导出EXCLE,仅仅支持.XLS,不支持.XLSX。

如果我们强行返回XLSX,将无法打开此文件。

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

标签:文件,map,导出,excel,HTML,jsp,JSP
From: https://www.cnblogs.com/Marydon20170307/p/17382357.html

相关文章

  • phpstorm导出导入设置
    导出设置到JAR文档要导出IDE设置到一个JAR文档在主菜单,选择File|ExportSettings在打开的ExportSettings对话框,指定要导出的设置项通过选择它们旁边的复选框。默认的,所有设置项都已选中。在Exportsettingsto文本框,为目标存档指定完全合适的名称。手动的输入路径或点击Browse......
  • TEXT_CONVERT_XLS_TO_SAP-上传EXCEL文件
    *&---------------------------------------------------------------------**&ReportZ018*&*&---------------------------------------------------------------------**&*&上传Excel文件*&--------------------------------------------......
  • easyexcel使用
    定义实体类在EasyExcel中,以面向对象思想来实现导入导出,无论是导入数据还是导出数据都可以想象成具体某个对象的集合,所以为了实现导出用户信息功能,首先创建一个用户对象UserDO实体类,用于封装用户信息:/***用户信息**@authorwilliam@StarImmortal*/@Datapublicclass......
  • csv批量转为excel
    一个需求,代码如下:importpandasaspdimportosclassC_to_EXC:@staticmethoddefmkdir_folder():"""创建保存excel的文件夹"""folder_name="处理的excel"ifnotos.path.exists(folder_name):......
  • Excel正确使用VLOOKUP函数,快速查询匹配数据!
    #vlookup函数#在Excel当中我们如何正确地使用vlookup函数快速解决数据查询匹配的问题。 比如在下面的表格的当中,我们需要查询香蕉、桂圆、桃子这三种水果在武汉的销量 此时我们就需要在空白单元格里输入一个等于号和vlookup函数,接着可以看到此函数共有四个参数......
  • POI导出EXCEL经典实现
    1.ApachePOI简介ApachePOI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对MicrosoftOffice格式档案读和写的功能。.NET的开发人员则可以利用NPOI(POIfor.NET)来存取POI的功能。2.POI结构HSSF-提供读写MicrosoftExcelXLS格式档案的功能。XSSF-提供读写Micr......
  • 百万级数据excel导出功能如何实现
    百万级数据excel导出功能如何实现? 前言最近我做过一个MySQL百万级别数据的excel导出功能,已经正常上线使用了。这个功能挺有意思的,里面需要注意的细节还真不少,现在拿出来跟大家分享一下,希望对你会有所帮助。原始需求:用户在UI界面上点击全部导出按钮,就能导出所有商品数据。......
  • 在线excel:LuckySheet 入门
    Luckysheet,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。 文档地址:https://dream-num.github.io/LuckysheetDocs/zh/做一个页面编辑然后保存进数据库。另一个页面把前一个页面的内容展示出来。第一个页面,<!DOCTYPEhtml><html><headlang='zh'><met......
  • IDEA 设置JSP启动页面/默认页面
    一图解千惑在项目中WEB-INF中的web.xml文件中配置项目的默认启动页面。web.xml 是个XML格式的文件<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&......
  • IDEA 设置JSP启动页面/默认页面
    一图街千惑额在项目中WEB-INF中的web.xml文件中配置项目的默认启动页面。web.xml 是个XML格式的文件<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc......