java、jsp导出excel功能备份
问题踩坑:
ajax请求不能下载文件
必须这样:
<a href="/media">点击下载Excel</a>
或者
location.href = '/media';
js取表单数据:
var selectbatch = $("selectbatch").value
java代码:
package com.action;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import com.IHttpAction;
import com.sql.ExchangeSql;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.NumberFormats;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
/**
* @FileName: ExchangeSelectAction.java
* @Description:
* @Author : xingchong
* @CreateTime: Nov 15, 2018 8:42:45 PM
* @Copyright: Copyright (c) 2017
* @Version: 1.0
*/
public class ExchangeExportAction implements IHttpAction {
private ExchangeSql exchangeSql = new ExchangeSql();
private Logger logger = Logger.getLogger(ExchangeExportAction.class);
/* (non-Javadoc)
* @see com.gm.console.IHttpAction#action(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
public void action(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int batch = Integer.parseInt(request.getParameter("selectbatch"));
logger.info("selectbatch = "+ batch);
try {
InputStream is = this.exportExchangeCode(batch);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
String fileName = "batch_"+batch+"_"+sdf.format(new Date()) + ".xls";
response.setContentType("applicaiton/x-download");
response.addHeader("Content-Disposition", "attachment;filename="+fileName);
ServletOutputStream out=response.getOutputStream();
int len=0;
byte[] buffer=new byte[1024];
while((len=is.read(buffer))>0){
out.write(buffer,0,len);
}
is.close();
out.close();
// response.getWriter().write("<span>export excel ok...</span>");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取兑换码html信息
*
* @param batch
* @return
* @throws Exception
*/
private InputStream exportExchangeCode(int batch) throws Exception {
List<List<String>> dataList = null;
if (batch > 0) {
dataList = this.exchangeSql.getExchangeData(batch, Integer.MAX_VALUE);
} else {
dataList = this.exchangeSql.getSimpleExchangeData(Integer.MAX_VALUE);
}
List<String> titleList = dataList.get(0);
dataList.remove(0);
InputStream is = null;
try {
ByteArrayOutputStream os = new ByteArrayOutputStream();
WritableWorkbook wwb = Workbook.createWorkbook(os);
int step = 50000;
int size = dataList.size();
int sheetIndex = 0;
for(int start = 0; start < size; start+=step){
int end = start + step;
end = end > size? size:end;
List<List<String>> dataListSub = new ArrayList<List<String>>();
dataListSub.add(titleList);
dataListSub.addAll(dataList.subList(start, end));
this.writeDataToSheet(wwb, dataListSub, sheetIndex++);
}
wwb.write();
wwb.close();
is = new ByteArrayInputStream(os.toByteArray());
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
return is;
}
/**
* 写一页excel
* @param wwb
* @param dataList
* @param sheetIndex
* @throws RowsExceededException
* @throws WriteException
*/
private void writeDataToSheet(WritableWorkbook wwb, List<List<String>> dataList, int sheetIndex)
throws RowsExceededException, WriteException {
WritableSheet sheet = wwb.createSheet("data_"+sheetIndex, sheetIndex);
WritableCellFormat wcf = new WritableCellFormat(NumberFormats.TEXT);
for (int r = 0; r < dataList.size(); r++) {
List<String> list = dataList.get(r);
for (int c = 0; c < list.size(); c++) {
String string = list.get(c);
WritableCell writableCell = new Label(c, r, string, wcf);
sheet.addCell(writableCell);
}
}
}
}
jsp代码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>My JSP 'buildinglist.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="Content-type" content="text/html charset=utf-8">
<meta http-equiv="expires" content="0">
<LINK href="/console/style/default.css" type=text/css rel=stylesheet>
<LINK href="/console/style/style.css" type=text/css rel=stylesheet>
<LINK href="/console/style/style3.css" type=text/css rel=stylesheet>
<LINK href="/console/style/tab.webfx.css" type=text/css rel=StyleSheet>
<link href="/console/style/calendar.css" type=text/css rel=StyleSheet>
<script type="text/javascript" src="/console/js/prototype.js"></script>
<script type="text/javascript" src="/console/js/tools.js"></script>
<script type="text/javascript" src="/console/js/calendar.js"
charset="utf-8"></script>
<script type="text/javascript" src="/console/js/swfobject.js"
charset="utf-8"></script>
<script type="text/javascript">
function btnAjax() {
$("resultTable").innerHTML = "<span style=\"color: red;\">正在紧张生成中...请勿重复点击...</span>";
var myAjax = new Ajax.Request("customRequest.htm?catalog=exchange_add",
{
method : 'post',
parameters : Form.serialize('Form1'),
onComplete : function(x) { //提交成功回调
$("resultTable").innerHTML = x.responseText;
},
onError : function(x) { //提交失败回调
alert(x.statusText);
}
});
}
function selectAjax() {
$("selectTable").innerHTML = "<span style=\"color: green;\">正在查询中...请稍等...</span>";
var myAjax = new Ajax.Request(
"customRequest.htm?catalog=exchange_select", {
method : 'post',
parameters : Form.serialize('Form1'),
onComplete : function(x) { //提交成功回调
$("selectTable").innerHTML = x.responseText;
},
onError : function(x) { //提交失败回调
alert(x.statusText);
}
});
}
//export excel
function exportExcel() {
var selectbatch = $("selectbatch").value
location.href = '/customRequest.htm?catalog=exchange_export&selectbatch='+selectbatch;
}
</script>
<style type="text/css">
</style>
</HEAD>
<body>
<form id="Form1" name="Form1" method="post">
<div style="clear: both; height: 1px; overflow: hidden"></div>
<div width="98%" align="left" valign="left">
<font size="6px"> <br>兑换码生成 <br>
<br>
</font> ${result}
</div>
<table align="left" class=detail>
<tbody>
<tr>
<td class="list_td01">类型</td>
<td><select name="codeType">
<option value="1">单人单次</option>
<option value="0">多人共享单次</option>
</select> <span style="color: red;">1-单人单次 0-多人单次</span></td>
<td class=list_td01>生成数量</td>
<td class=list_td02><select name="num">
<option value="10">10</option>
<option value="100">100</option>
<option value="1000">1000</option>
<option value="10000">10000</option>
<option value="100000">100000</option>
</select></td>
</tr>
<tr align="left">
<td class="list_td01">开始时间</td>
<td class="list_td02"><input type="text"
onclick="displayCalendar(this,'yyyy-mm-dd hh:ii:00',this,true);"
class="datetime" id="startTime" name="startTime"> <span
style="color: red;">(必须)</span></td>
<td class="list_td01">结束时间</td>
<td class="list_td02"><input type="text"
onclick="displayCalendar(this,'yyyy-mm-dd hh:ii:00',this,true);"
class="datetime" id="endTime" name="endTime"> <span
style="color: red;">(必须)</span></td>
</tr>
<tr>
<td class=list_td01>奖励Json</td>
<td class=list_td02 colspan="3"><input type="text" size=90
name="rewardJson" id="rewardJson" value=""> <span
style="color: red;">(必须)</span></td>
</tr>
<tr>
<td class=list_td01>等级限制</td>
<td class=list_td02 colspan="1"><select name="level">
<option value="1">1级</option>
<option value="10">10级</option>
<option value="20">20级</option>
<option value="30">30级</option>
<option value="40">40级</option>
<option value="50">50级</option>
<option value="60">60级</option>
<option value="70">70级</option>
<option value="80">80级</option>
<option value="90">90级</option>
<option value="100">100级</option>
<option value="110">110级</option>
<option value="120">120级</option>
</select></td>
<td class=list_td01>生成批次</td>
<td class=list_td02 colspan="1"><input type="text" size=20
name="batch" id="batch" value="1"> <span
style="color: red;">(必须)</span></td>
</tr>
<tr>
<td align="left"><input type="button" class="butcom"
onclick="btnAjax()" value=" 生成提交 " /></td>
</tr>
</table>
<TABLE id="resultTable" align="left" class=common></TABLE>
<!-- select about -->
<table align="left" class=detail>
<tr>
<td class=list_td01>批次 </td>
<td class=list_td02><input type="text" size=10 name="selectbatch"
id="selectbatch" value="0"> <span
style="color: green;">(0表求所有批次)</span></td>
<td align="left"><input type="button" class="butcom"
onclick="selectAjax()" value=" 查询 " /></td>
<td align="left"><input type="button" class="butcom"
onclick="exportExcel()" value=" 导出excel " /></td>
</tr>
</table>
<TABLE id="selectTable" align="left" class=common></TABLE>
</form>
</body>
</HTML>
java、jsp导出excel功能备份的更多相关文章
- JAVA实现导出excel功能,封装通用导出工具类
引入maven <!--excel导出--> <dependency> <groupId>net.sourceforge.jexcelapi</groupId ...
- jsp导出Excel功能的实现
借助POI的excel接口,可以方便得实现excel导出功能: 首先需要引入poi对应的jar包 1.前端jsp页面需要一个a链接. web页面文件MIM类型的下载,只需要一个a元素,该a可以链到该文 ...
- 重构:以Java POI 导出EXCEL为例
重构 开头先抛出几个问题吧,这几个问题也是<重构:改善既有代码的设计>这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的 ...
- JSP导出Excel后身份证后三位为0
JSP导出Excel身份证号码超出Excel最大限制,用科学计数法表示,但后三位为0,修改方式: <style type="text/css">.txt { ...
- Atitit.导出excel功能的设计 与解决方案
Atitit.导出excel功能的设计 与解决方案 1.1. 项目起源于背景1 1.2. Js jquery方案(推荐)jquery.table2excel1 1.3. 服务器方案2 1.4. 详细 ...
- 项目笔记:导出Excel功能
1.前台这块: var ids=""; $.post("${basePath}/assets/unRegDeviceAction_getDeviceIds.do" ...
- java 实现导出Excel文件
java 实现导出Excel(java生成 excel 并导出文件) 经常有有一些数据需要导出成 excel 格式 ,所以就需要实现啦 开始: 1.加入jar poi-3.6-20091214. ...
- 项目笔记:导出Excel功能分sheet页插入数据
导出Excel功能分sheet页处理数据: /*导出EXCEL*/ public void createExcel() { log.info("导出Excel功能已经启动-BEGIN&quo ...
- vue项目导出EXCEL功能
因为一些原因导出EXCEL功能必须前端来做,所以就研究了一下,在网上也找了一些文章来看,有一些不完整,我做完了就记录下来,供大家参考: 1.首先先安装依赖: npm install file-save ...
随机推荐
- 限时免费 GoodSync 10 同步工具【转】
一款不错的软件,正在开发本身的云盘,要是能够云执行任务就更好了! GoodSync 10是一种简单和可靠的文件备份和文件同步软件.它会自动分析.同步,并备份您的电子邮件.珍贵的家庭照片.联系人,.MP ...
- NOIp2018集训test-9-16(联考二day2)
T1旋转子段 一开始脑袋抽了花了近一个小时写了个跟这题毫无关系的莫名其妙的代码,一急代码就各种bug,最后t1就花了一个半小时多,然后后面时间不太够了,考得稀烂. 因为每个数存在唯一的中心使得绕这个中 ...
- NX二次开发-设置WCS显示UF_CSYS_set_wcs_display
NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //设置WCS显示 //1显示WCS, 0不显 ...
- ionic-CSS:ionic 头部与底部
ylbtech-ionic-CSS:ionic 头部与底部 1.返回顶部 1. ionic 头部与底部 Header(头部) Header是固定在屏幕顶部的组件,可以包如标题和左右的功能按钮. ion ...
- 2019 牛客多校第一场 F Random Point in Triangle
题目链接:https://ac.nowcoder.com/acm/contest/881/F 题目大意 给定二维平面上 3 个整数表示的点 A,B,C,在三角形 ABC 内随机选一点 P,求期望$E ...
- 牛客D-Where are you /// kruskal+tarjan找无向图内的环
题目大意: https://ac.nowcoder.com/acm/contest/272/D 在一个无向图中,给定一个起点,从起点开始走遍图中所有点 每条边有边权wi,表示第一次经过该道路时的花费( ...
- springboot中参数校验
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...
- 次梯度(Subgradient)
参考链接:https://closure11.com/subgradient/
- Docker学习のWindows下如何访问Docker本身的虚拟机
获取可访问Docker守护程序的容器 docker run --privileged -it -v /var/run/docker.sock:/var/run/docker.sock jongalla ...
- WebApi路由机制详解
随着前后端分离的大热,WebApi在项目中的作用也是越来越重要,由于公司的原因我之前一直没有机会参与前后端分离的项目,但WebApi还是要学的呀,因为这东西确实很有用,可单独部署.与前端和App交互都 ...