每次我们导出excel的时候 ,如果数据量很大,导出花费的时间会很长,页面却有没人任何反应,这个时候用户会认为系统有问题,要么关了页面,要么狂点导出。感知太差了~甚至用户误操作会导致服务器崩溃。 所以我么我们需要通过进度条方式告知客户导出的进度。 以下为java poi +Easyui 实现导出excel进度条思路,通过在导出过程中循环请求后台确认时候导出完毕来控制进度条显示。

后台 新增一个通用获取是否导出完毕方法: session中存入一个exportedFlag

/**

*

* @Function: OsTaskAction::isExport

* @Description: 是否导出完毕

* @version: v1.0.0

* @author: luanhy

* @date: 2015年12月5日 下午4:32:32

*

* Modification History:

* Date Author Version Description

*-------------------------------------------------------------

*/

public void isExport(){

Object exportedFlag = super.getSession().getAttribute("exportedFlag");

if(exportedFlag == null){

logger.info("已经导完");

super.writeWithUtf8("true");

}else{

logger.info("还未导完");

super.writeWithUtf8("false");

}

}

后台 导出excel方法:只需在在导出前设置session中 exportedFlag任意值,导出后清空exportedFlag即可,清空设置exportedFlag 大家可以对所有导出请求进行封装设置。

/**

* 普通导出

*/

public void exportExcel1(){

super.getSession().setAttribute("exportedFlag", "false");

//导出excel方法略过

super.getSession().removeAttribute("exportedFlag");

}

附录 super Action调用到的方法:

public HttpSession getSession() {

return ServletActionContext.getRequest().getSession();

}

public void writeWithUtf8(String str){

try {

HttpServletResponse response = ServletActionContext.getResponse();

response.setContentType("text/html");

response.setCharacterEncoding("utf-8");

this.write(str);

} catch (Exception e) {

logger.error(e,e);

}

}

super Action漏了一方法

/**

* 输出响应

*

* @param str

* @throws Exception

*/

public void write(String str) throws Exception {

HttpServletResponse response = this.getResponse();

response.getWriter().write(str);

response.getWriter().flush();

response.getWriter().close();

前台,导出js方法: 1.导出前显示进度条, 2 开始导出 3.通过setInterval 方法循环请求后台获取exportedFlag, 一旦后台返回true(导出完毕),则关闭进度条并提示。

/**

* 导出excel(带进度条)

* @param exportExcelUrl

* @param scanTime 检测是否导出完毕请求间隔 单位毫秒

* @param interval 进度条更新间隔(每次更新进度10%) 单位毫秒 导出时间越长 请设置越大 200 对应2秒导出时间

*/

function exportExcWithprogress(isExportUrl,exportExcelUrl,scanTime,interval){

if(scanTime<1000 || scanTime == undefined){

scanTime = 1000;

}

$.messager.progress({

title:'导出中,请等待...',

msg:'导出进度:',

interval: interval

});

$.messager.progress('bar').progressbar({

onChange: function(value){

if(value == 100){

$.messager.show({

title:'导出完毕',

msg:'导出完毕,请保存!',

timeout:2000,

showType:'fade',

style:{

top:'45%'

}

});

$.messager.progress('close');

}

}

});

location.href = exportExcelUrl;

var timer = setInterval(function(){

$.ajax({

url: isExportUrl+'?id='+Math.random(),

success: function(data){

console.log(data);

if(data == "true"){

$.messager.progress('bar').progressbar('setValue','100');

clearInterval(timer);

}

},

error:function(e){

console.log(e.responseText);

}

});

}, scanTime);

}

参数 scanTime: 可以根据服务器压力和估计的导出时间调整。 interval: 如果导出需要大约time= 10秒 设置interval 比 time*100 稍大即可,不确定导出时间可以设置的大些,效果是进度条仍然会自动关闭,只是可能从20%突然跳到100%。

调用例子如下: 这里输入代码

function exportExcel(){

var isExportUrl = "task/isExport.do";

var exportExcelUrl = "task/exportExcel.do";

exportExcWithprogress(isExportUrl, exportExcelUrl, undefined ,500);

}

java excel进度条_导出excel 用easyui显示进度条(也适用于其他框架遮罩层,进度条)...相关推荐

  1. mysql只能导出65535条_导出Excel超过65535条限制解决方案

    使用poi导出excel的时候如果数据过多,超过65535条会报错,因为excel2003一个sheet表最多导出65535条,excel2007是10万4000多条限制. 因此遇到这种excel导出 ...

  2. Java 利用hutool工具实现导出excel并合并单元格

    Java 利用hutool工具实现导出excel并合并单元格 controller层调用service,就一个核心方法,没错就下面这个代码就能实现了.前提是项目里面要引用hutool包.把我这个复制到 ...

  3. 中报表导出带表头_来看看Java是 如何优雅的导出 Excel的

    点击上方"Python高校",关注 文末干货立马到手 来源:你在我家门口 juejin.im/post/5c6b6b126fb9a04a0c2f024f 前言 公司项目最近有一个需 ...

  4. java将jsp页面表格导出excel表格数据_简单的POI导出JSP页面表格数据到excel

    数据库中的equipment表数据: 读取数据库中表数据的代码TestExcel.java public class TestExcel extends BaseAction{/** * @param ...

  5. java字符串换行符替换成段落标记_导出EXCEL换行符br为什么没有起到作用/poi导出excel内存溢出...

    导出EXCEL换行符br为什么没有起到作用 br是html中的换行符,在excel中并不起效,excel中换行是用alt enter强制插入的,或者用vba代码强制换行的. 导出EXCEL换行符为什么 ...

  6. vue导出excel加一个进度条_vue导出excel遇到的问题解决方法

    本篇文章给大家带来的内容是关于vue导出excel遇到的问题解决方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 需求: Vue+element UI el-table下的导出当前 ...

  7. java导出excel压缩包_java动态导出excel压缩成zip下载的方法

    本文实例为大家分享了java动态导出excel压缩成zip下载的具体代码,供大家参考,具体内容如下 package pack.java.io.demo; import java.io.Buffered ...

  8. java使用POI工具类导出excel

    POI导出excel 1.导入maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId ...

  9. java ssh 下载excel,SSH整合WEB导出EXCEL案例

    基于Spring,Struts2,Hibernate整合, jsp页面导出(下载)excel文件的简单应用 1)本例不采用Java任何导出excel文件常用的poi或者jxl 等第三方jar包,仅仅基 ...

最新文章

  1. Java 18 正式发布
  2. 统计学习方法|感知机原理剖析及实现
  3. Log4j配置文件解读和模板页收藏
  4. 【机器学习与差分隐私代码实现】差分隐私代码实现系列(十二)
  5. Flutter 图片选择器 SelectPhotoWidget
  6. android功耗优化(2)--对齐唤醒
  7. Python字符串splitlines()
  8. mysql 在update中实现子查询的方式
  9. 读书篇:《细说PHP》二、PHP的基本语法、变量、常量、以及运算符
  10. 个人永久性免费-Excel催化剂功能第44波-可见区域复制粘贴不覆盖隐藏内容
  11. 51单片机程序设计——电子音乐盒
  12. App自动绑定的五大应用场景
  13. 怎样更改itunes备份位置_iTunes备份路径怎么改?教你无脑修改iPhone备份文件路径...
  14. 2022年茶艺师(初级)考试练习题及模拟考试
  15. feign Ambiguous mapping 解决方式
  16. 服务器ftp上传失败的原因有什么
  17. loss weight
  18. BZOJ 5477: 星际穿越
  19. 【日拱一卒行而不辍20220921】自制操作系统
  20. 50岁的程序员该何去何从

热门文章

  1. 父进程与子进程间相互发送信号
  2. Springboot文件上传报错:failed to convert java.lang.String to org.springframework.util.unit.DataSize
  3. 斯坦福极简经济学 读书笔记
  4. 手机号归属地,在线查询api
  5. Wordpress搭载七牛云CDN图片不显示问题解决
  6. 【BZOJ 1233】 干草堆
  7. 2021面试题——微信小程序面试题
  8. 【Note】微信小程序js使用农历(一行代码)
  9. excel文档损坏打不开的原因是什么?
  10. 失败并不可怕,可怕的是害怕失败