使用 poi 通过浏览器方式导出Excel表格(导出字段与表格字段不一样且取值逻辑改变)

思路:拿到表格页面查询的结果作为查询条件,表格页面的url和点击导出按钮的url是一样的,按钮的url多一个参数用来做判断区分

前端代码:

 <iframe id="exp" style="display:none" src=''></iframe><button onclick="downLoad()" type="button" class="btn btn-default">导出Excel</button><script>        function downLoad(){url = window.location.href +"&excel=1";document.getElementById("exp").src=url;//  window.location.href =url;}</script>

后台逻辑:表格页面action

public ActionForward showStatisticSheetList(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception{IStatMethod statMethod = (IStatMethod) getBean(mapping.getAttribute());statMethod.showStatisticSheetList(mapping, form, request, response);String findListForward =request.getParameter("findListForward");List attribute = (List)request.getAttribute("estList");String excel = request.getParameter("excel");       if(excel != null){//List attribute = (List)request.getAttribute("estList");exportXls(attribute,response);return null;}return  mapping.findForward(findListForward);//mapping.findForward("statisticsheetlist");}

poi代码

public void exportXls(List attribute, HttpServletResponse response) throws Exception{String ids = "";for(int i=0;i<attribute.size();i++){ComplaintTimeoutMonitorDetailVO object = (ComplaintTimeoutMonitorDetailVO) attribute.get(i);String id = object.getMainid();ids += "'"+id +"',";}String id = ids.substring(0,ids.length()-1);IDownLoadSheetAccessoriesService mgr = (IDownLoadSheetAccessoriesService) ApplicationContextHolder.getInstance().getBean("IDownLoadSheetAccessoriesService");String sql = XmlManage.getFile("/config/statistic/complainttimeoutmonitor-config/sqlFile.xml").getProperty("queryCheckRuleList");String sqls = sql + " where main.id in ("+id+")";List list = mgr.getSheetAccessoriesList(sqls);Map object = (Map)list.get(0);object.get(object);HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet sheet = workbook.createSheet("工单信息表");//定义一个表名HSSFRow row = sheet.createRow(0);//定义第一行row.createCell(0).setCellValue("工单流水号");//列标题row.createCell(1).setCellValue("主题");row.createCell(2).setCellValue("派单时间");row.createCell(3).setCellValue("受理时限");row.createCell(4).setCellValue("处理时限");row.createCell(5).setCellValue("故障地市");row.createCell(6).setCellValue("客服原始流水");row.createCell(7).setCellValue("客户流水号");row.createCell(8).setCellValue("电话号码");row.createCell(9).setCellValue("处理环节");row.createCell(10).setCellValue("处理环节操作类型");row.createCell(11).setCellValue("处理环节处理角色或处理人");row.createCell(12).setCellValue("操作人部门");row.createCell(13).setCellValue("操作人角色");row.createCell(14).setCellValue("处理环节退回原因");row.createCell(15).setCellValue("到达此操作的处理时间");for (int i=0; i<list.size();i++){//循环调用查询出来的数据,在循环插入HSSFRow row1 = sheet.createRow(i+1);//定义i+1行,因为第i行且i的值为零则如果从i开始会和上面定义第一行冲突,所以要从第i+1行开始Map map = (Map)list.get(i);row1.createCell(0).setCellValue((String)map.get("sheetid"));row1.createCell(1).setCellValue((String)map.get("title"));row1.createCell(2).setCellValue((String)map.get("sendtime"));row1.createCell(3).setCellValue((String)map.get("acceptlimit"));row1.createCell(4).setCellValue((String)map.get("completelimit"));row1.createCell(5).setCellValue((String)map.get("tocity"));row1.createCell(6).setCellValue((String)map.get("oldserialno"));row1.createCell(7).setCellValue((String)map.get("parentcorrelation"));row1.createCell(8).setCellValue((String)map.get("customphone"));row1.createCell(9).setCellValue((String)map.get("operatetype"));row1.createCell(10).setCellValue((String)map.get("activetemplateid"));row1.createCell(11).setCellValue((String)map.get("toorgroleid"));row1.createCell(12).setCellValue((String)map.get("deptname"));row1.createCell(13).setCellValue((String)map.get("subrolename"));row1.createCell(14).setCellValue((String)map.get("remark"));row1.createCell(15).setCellValue((String)map.get("operatetime"));}//输出流String filename ="工单信息表.xls";response.setContentType("application/ms-excel;charset=UTF-8");response.setHeader("Content-Disposition", "attachment;filename=".concat(String.valueOf(URLEncoder.encode(filename, "UTF-8"))));OutputStream out = response.getOutputStream();try {workbook.write(out);// 将数据写出去       } catch (Exception e) {e.printStackTrace(); } finally {out.close();}}

sql通过配置文件读取:

<?xml version="1.0" encoding="UTF-8"?>
<boco><queryCheckRuleList>SELECT DISTINCTmain.id AS mainid,main.sheetId AS sheetid,main.title AS title,main.STATUS AS STATUS,main.mainInterfaceSheetType AS intertype,TO_CHAR ( main.sendTime, 'yyyy-MM-dd HH24:MI:ss' ) AS sendtime,TO_CHAR ( main.sheetAcceptLimit, 'yyyy-MM-dd HH24:MI:ss' ) AS acceptlimit,TO_CHAR ( main.sheetCompleteLimit, 'yyyy-MM-dd HH24:MI:ss' ) AS completelimit,( CASE WHEN main.mainComplaintAreaCity IS NULL THEN GET_AREANAME_BY_AREAID (main.customAttribution) ELSE GET_AREANAME_BY_AREAID ( main.mainComplaintAreaCity ) END ) AS tocity,main.oldserialNo AS oldserialno,main.parentcorrelation AS parentcorrelation,main.customphone AS customphone,c.operatetype,c.activetemplateid,c.toorgroleid,c.deptname,c.subrolename,c.remark,c.operatetime
FROMcomplaint_main mainLEFT JOIN (
SELECTt.mainid,nvl ( t1.NAME, '新增工单' ) AS operatetype,nvl ( t2.NAME, '新建派发' ) AS activetemplateid,nvl ( t3.SUBROLENAME, t4.username ) AS toorgroleid,t5.deptname AS deptname,t6.SUBROLENAME AS subrolename,
CASEWHEN t.operatetype = '17' THENt.REMARK ELSE '' END AS remark,TO_CHAR ( t.operatetime, 'yyyy-MM-dd HH24:MI:ss' ) AS operatetime
FROM( SELECT a.*, row_number ( ) over ( PARTITION BY a.mainid ORDER BY a.operatetime DESC ) rw FROM complaint_link a ) tLEFT JOIN v_complaint_operationType t1 ON t1.id = to_char ( t.OPERATETYPE )LEFT JOIN v_complaint_operationType t2 ON t2.id = to_char ( t.ACTIVETEMPLATEID )LEFT JOIN taw_system_sub_role t3 ON t3.id = t.TOORGROLEIDLEFT JOIN taw_system_user t4 ON t4.userid = t.OPERATEUSERIDLEFT JOIN taw_system_dept t5 ON t5.deptid = t.OPERATEDEPTIDLEFT JOIN taw_system_sub_role t6 ON t6.id = t.OPERATEROLEID
WHEREt.rw = 1
) c ON c.mainid = main.id </queryCheckRuleList></boco>

"GET_AREANAME_BY_AREAID"自定义函数:

CREATE OR REPLACE
FUNCTION           "GET_AREANAME_BY_AREAID"(area_id in varchar2) return varchar2 isResult varchar2(100);
begin/*function:获取地域名称 */select areaName into result from taw_system_area r where r.areaId=area_id;return(Result);
end GET_AREANAME_BY_AREAID;

使用 poi 通过浏览器方式导出Excel表格(导出字段与表格字段不一样且取值逻辑改变)相关推荐

  1. 基于 POI 封装 ExcelUtil 精简的 Excel 导入导出

    由于 poi 本身只是针对于 excel 等office软件的一个工具包,在一些常规的 excel 导入导出时,还需要再做一次精简的封装,简化代码耦合. 一.现状 本人经历过几家公司的代码封装,导入导 ...

  2. php页面表格导出excel表格数据类型,php页面表格导出excel表格数据类型-php导出excel是不是导出整个表的?可不可以导出指......

    php 怎么把数据导出到excel表格 昨天项目里有个新需求,客户希望把一些数据能导出成为Excel表格,刚开始用PHP原生输入Excel表格,发现效果不是很理想,于是找到一个比较著名的库:PHPEx ...

  3. 如何把股票数据导出excel?导出股票历史数据到Excel的方法

    共享一个可以把股票数据导出Excel的方法,是一个在线下载股票历史数据,目前可以下载A股.港股.美股所有个股的历史数据,数据是Excel的方便分析查看.做表,最主要是免费... 只要两步就能下载: 填 ...

  4. js导出EXCEL js导出EXCEL

    参考一:http://wenku.baidu.com/view/7b81f3eb6294dd88d0d26b57.html 参考二: js导出EXCEL js导出EXCEL <html> ...

  5. springboot+poi开发excel导出 加载Excel模板导出 Excel批量导出详解

    提到Excel导出功能,可能很多人都使用springmvc框架做过,笔者今天要给大家分享的是基于springBoot开发Excel复杂模板导出功能(所谓复杂模板指在模板里的特定表头里有不同的单元格合并 ...

  6. 关于在POI以SAX方式解析,会导出拼音(音标)的问题解决

    参考文章: POI以SAX方式解析Excel2007大文件(包含空单元格的处理) 这个片文章中,POI以SAX方式来读取excel,解决读大文件的问题,但是文章中创建ReadOnlySharedStr ...

  7. 前端导出excel(element+xlsx+filesaver插件),表格数据重复问题解决

    纯前端导出excel,表格数据渲染重复 业务需求 页面有table表格里的多条数据,并且没有分页.需求希望不调用接口,纯前端生成excel文件实现导出功能. 效果图 1.安装依赖(xlsx 和 fil ...

  8. xlsxwriter进度条php,PHP导出Excel数据导出,前端进度条实现方式

    效果如上,结合layer组件以及ajax分页实现,具体代码如下 前端代码 用户数据导出 // 执行事件 function exportData() { var loading = layer.load ...

  9. think php 导出excel,Thinkphp5导出excel

    公共方法,可以放在common.php里,调用也很简单 查询完数据后,直接调用该方法即可: excelExport('Answer',$header,$data); 第一个参数是导出的名称,第二个参数 ...

最新文章

  1. 马斯克蝉联美国CEO薪酬榜No.1,年入41亿,库克皮猜纳德拉加起来都没他高
  2. Intel主动管理技术用例-远程诊断、远程修复
  3. 两个unit取和会溢出吗_TCP 三次握手原理,你真的理解吗?
  4. 教你认清MVC,MVP和MVVM
  5. BSP hidden form in generated html source code
  6. Java 解析URL
  7. php 逻辑与运算符使用说明
  8. 联想内部工程师 Vista自学手册
  9. 有害评论识别问题:数据可视化与频率词云
  10. bp matlab预测结果差,BP神经网络 预测 精度差
  11. cat << EOF 什么意思?
  12. Excel如何来绘制不同函数的图像;不同数学符号可以在word中打处理;
  13. Sketch52 52.1 新功能介绍(包含下载链接)
  14. 常用英语食品词汇- 调味品类
  15. centos7 nvidia显卡安装
  16. Oracle安装提示无效条目,oracle NET 无效条目,要求有效的“服务名”
  17. RC522读卡、修改UID、复制门禁卡(arduino板子)
  18. EasyCVR家庭远程视频监控解决方案
  19. Centos7 安装 OpenStack 遇到过的错误
  20. 【Sys】不能打开要写入的文件:“X:\Y\Z.xx“单击[Abort]放弃安装,[Retry]重新尝试写入文件,或[Ignore]忽略这个文件。

热门文章

  1. /tmp 和 /var/tmp 的区别
  2. 【开心一刻】为什么程序员怕改需求?看完这些神解释我笑了
  3. matlab练习程序(三角形内切圆)
  4. 算法问题之“圆桌问题”,hdu 4841
  5. ncnn报null pointer dereference异常
  6. 蓝牙学习(二)-- 三种蓝牙架构实现方案(蓝牙协议栈方案)
  7. Socket TCP/IP 通信实例
  8. 不区分语言开发工具1(服务压力测试,跨域问题解决,Redis进行密码的设置,设计模式,搭建FTP局域网服务,redis热key,redis哨兵,VueRouter模式)
  9. 【论文翻译】Deep Learning for Multi-view Stereo via Plane Sweep: A Survey(2021)
  10. mobiscroll 日期控件使用