一、miniUI官方前台页面代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml">
<head><title> 导出Excel</title><metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/><metahttp-equiv="content-type"content="text/html; charset=UTF-8" /><linkhref="../demo.css"rel="stylesheet"type="text/css" /><scriptsrc="../../scripts/boot.js"type="text/javascript"></script></head>
<body><h1> 导出Excel</h1>      <divstyle="padding-bottom:5px;"><span>员工姓名:</span><inputtype="text"id="key"  /><inputtype="button"value="查找"onclick="search()"/><inputtype="button"value="导出Excel"onclick="ExportExcel()"style="margin-left:50px;"/></div><divid="datagrid1"class="mini-datagrid"style="width:700px;height:280px;"url="../data/AjaxService.jsp?method=SearchEmployees"idField="id"sizeList="[5,10,20,50]"pageSize="10"><divproperty="columns"><divtype="indexcolumn" ></div><divfield="loginname"width="120"headerAlign="center"allowSort="true">员工帐号</div>    <divfield="name"width="120"headerAlign="center"allowSort="true">姓名</div>                            <divfield="gender"width="100"renderer="onGenderRenderer"align="center"headerAlign="center">性别</div><divfield="salary"width="100"allowSort="true">薪资</div>                                    <divfield="age"width="100"allowSort="true">年龄</div><divfield="createtime"width="100"headerAlign="center"dateFormat="yyyy-MM-dd"allowSort="true">创建日期</div>                </div></div>   <iframeid="exportIFrame"style="display:none;"></iframe><!--导出Excel相关HTML--><formid="excelForm"action="JXLExample.jsp"method="post"target="excelIFrame"><inputtype="hidden"name="columns"id="excelData" /></form><iframeid="excelIFrame"name="excelIFrame"style="display:none;"></iframe><scripttype="text/javascript">mini.parse();vargrid=mini.get("datagrid1");grid.load();//对"createtime"字段,进行降级排序
grid.sortBy("createtime","desc");functionsearch() {varkey=document.getElementById("key").value;grid.load({ key: key });}$("#key").bind("keydown",function(e) {if(e.keyCode== 13) {search();}});///varGenders=[{ id:1, text:''}, { id:2, text:''}];functiononGenderRenderer(e) {for(vari= 0, l=Genders.length; i<l; i++) {varg=Genders[i];if(g.id==e.value)returng.text;}return "";}functionExportExcel() {varcolumns=grid.getBottomColumns();functiongetColumns(columns) {columns=columns.clone();for(vari=columns.length- 1; i>= 0; i--) {varcolumn=columns[i];if(!column.field) {columns.removeAt(i);}else{varc={ header: column.header, field: column.field };columns[i]=c;}}returncolumns;}varcolumns=getColumns(columns);varjson=mini.encode(columns);                        document.getElementById("excelData").value=json;varexcelForm=document.getElementById("excelForm");excelForm.submit();            }</script><divclass="description"><h3>Description</h3></div>
</body>
</html>

这里主要与导出相关的代码就是ExportExcel()这个JS方法,主要是将页面上的表头columns以json的形式通过excelForm 这个表单传给后台。

JAVA这里跟官方页面的代码有所不同,官方页面实现方式是.Net。

 <!--导出Excel相关HTML--><formid="excelForm"action="JXLExample.jsp"method="post"target="excelIFrame"><inputtype="hidden"name="columns"id="excelData" /></form><iframeid="excelIFrame"name="excelIFrame"style="display:none;"></iframe>

这个form表单中的action填写为自己对应的JSP页面即可。

二、官方JAVA后台代码

JXLExample.jsp文件
<%@page import="java.io.OutputStream"%>
<%@page import="jxl.Workbook"%>
<%@page import="jxl.write.Label"%>
<%@page import="jxl.write.WritableSheet"%>
<%@page import="jxl.write.WritableWorkbook"%>
<%@page import="javax.print.attribute.standard.Finishings"%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.*,Test.*,java.lang.reflect.*"%>
<%request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");    excelWrite(request, response);%>
<%!public HashMap SearchEmployees(HttpServletRequest request, HttpServletResponse response) throwsException
{//查询条件String key = request.getParameter("key");//字段排序String sortField = request.getParameter("sortField");String sortOrder= request.getParameter("sortOrder");HashMap result= new Test.TestDB().SearchEmployees(key, 0, 10000, sortField, sortOrder);returnresult;
}public void excelWrite(HttpServletRequest request, HttpServletResponse response) throwsException
{    OutputStream out=response.getOutputStream();String fname= "grid";response.reset();//清空输出流
response.setCharacterEncoding("UTF-8");//设置相应内容的编码格式fname = java.net.URLEncoder.encode(fname,"UTF-8");response.setHeader("Content-Disposition","attachment;filename="+new String(fname.getBytes("UTF-8"),"GBK")+".xls");response.setContentType("application/ms-excel");//定义输出类型String json = request.getParameter("columns");ArrayList rows=(ArrayList)Test.JSON.Decode(json);HashMap data=SearchEmployees(request, response);//需要的数据try{//获得开始时间//long start = System.currentTimeMillis();//创建Excel工作薄WritableWorkbook workbook =Workbook.createWorkbook(out);//添加第一个工作表并设置第一个Sheet的名字WritableSheet sheet = workbook.createSheet("grid1", 0);     Label label;//写出列名for(int i=0;i<rows.size();i++){      HashMap hm=(HashMap)rows.get(i);Iterator iterator=hm.keySet().iterator();                label= new Label(i,0,hm.get("header").toString());sheet.addCell(label);     }//写出数据ArrayList list = (ArrayList)data.get("data");for (int i = 1; i < list.size(); i++) {HashMap hm1=(HashMap)list.get(i);for (int k = 1; k < hm1.size(); k++) {for(int j=0;j<rows.size();j++){     HashMap hm=(HashMap)rows.get(j);String key=hm.get("field").toString();String value=String.valueOf(hm1.get(key));label= newLabel(j,i,value);sheet.addCell(label); }}    }//写入数据
workbook.write();//关闭文件
workbook.close();  out.close();//long end = System.currentTimeMillis();//System.out.println("----完成该操作共用的时间是:"+(end-start)/1000);} catch(Exception e) {//System.out.println("---出现异常---");
e.printStackTrace();     }
}%> 

这里最主要需要修改的代码就是

ArrayList rows = (ArrayList)Test.JSON.Decode(json);

这里是对前台传过来的表头的json字符串转化为list列表。

前台传递过来的JSON字符串如下:

[{\"header\":\"\\n\\t\\t\\t\\t\\t\\t内容\\n\\t\\t\\t\\t\\t\",\"field\":\"FYXMC\"},{\"header\":\"\\n\\t\\t\\t\\t\\t\\t上一年度实际开支(元)\\n\\t\\t\\t\\t\\t\",\"field\":\"ZFY\"},{\"header\":\"\\n\\t\\t\\t\\t\\t\\t本年度预算(元)\\n\\t\\t\\t\\t\\t\",\"field\":\"ZFY\"},{\"header\":\"\\n\\t\\t\\t\\t\\t\\t内容说明\\n\\t\\t\\t\\t\\t\",\"field\":\"SM\"}]

JAVAminiUI试用版的文件结构如下:(JSONTEST.JAVA这个文件是我加的测试文件)

Test.JSON.Decode()这个方法需要用到StringUtil.java和DateTransformer.java,将相关的三个文件都考到自己miniUI  web项目下即可使用Test.JSON.Decode()这个方法。

public HashMap SearchEmployees(HttpServletRequest request, HttpServletResponse response) throwsException
{     。。。。。。
}
HashMap data = SearchEmployees(request, response);

以上这两行代码就是从自己的项目取数据并且做拼接。miniUI只是前段框架,所以excel导出还是需要经过后台取数。

只要取出的数据符合List<HashMap>的数据结构形式,就可以直接使用剩余其他代码,SearchEmployees方法相关的代码都可以不要。List<HashMap>的Map里存放的是一列数据的哈希集合。

三、本人的取数方法

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.sql.RowSet;

import com.bl.platform.tools.json.JSONArray;
import com.bl.platform.tools.json.JSONException;
import com.bl.platform.tools.json.JSONObject;
import com.sdjxd.pms.platform.data.DbOper;

public classbmfy_zb {public static String nd = "";public static String btxbm = "";public static String txbm = "";public static String nr = "";public static String isLD = "";/*** *@paramysbh 预算编号*@parambtxbm 被填写部门*@paramtxbm 填写部门*@returnJSON对象数组*/public staticJSONArray deptJSON_Array(String nd,String btxbm,String txbm,String nr,String isLD){JSONArray rows= newJSONArray();String flownodeid= "0";//2为归档,0为开始,由于数据有限,先用起始阶段的数据进行测试String txbmsql = "";String fyzgbmsql= "";if("2".equals(isLD)){//如果是领导txbmsql = "";fyzgbmsql= "";}else if("1".equals(isLD)){//如果是主管部门txbmsql = " AND TXBM = '"+txbm+"' ";fyzgbmsql= "AND FYZGBMMC = '"+txbm+"' ";}else if("3".equals(isLD)){//如果是普通部门txbmsql = "";fyzgbmsql= "";}String sql1= "SELECT FYXID, FFXID, ZFY, FYXMC, SM FROM (SELECT SUM(YSFY) AS ZFY, FYXMC FROM (SELECT F.* FROM (SELECT E.* FROM (SELECT MAX(NODEINSTANCEID) AS NODEINSTANCEID, FLOWINSTANCEID FROM (SELECT * FROM JXD7_WF_NODEINSTANCE WHERE FLOWID = 'B1E7FA2F-E857-4135-8009-47C3159FC9AE' ) GROUP BY FLOWINSTANCEID ) D LEFT JOIN JXD7_WF_NODEINSTANCE E ON D.FLOWINSTANCEID = E.FLOWINSTANCEID WHERE D.NODEINSTANCEID = E.NODEINSTANCEID AND E.FLOWNODEID = '"+flownodeid+"' ) A LEFT JOIN JXD7_WF_FORMINSTANCE B ON A.FLOWINSTANCEID = B.FLOWINSTANCEID LEFT JOIN BL_T_CB_NDBMFYYSBZB C ON B.FORMINSTANCEID = C.FORMINSTANCEID LEFT JOIN BL_T_CB_NDBMFYYSZXB F ON C.YSBH = F.YSBH WHERE 1 = 1 AND BTXBM = '" + btxbm +"'" + txbmsql +" AND C.YSND = '"+nd+"' ) GROUP BY FYXMC ) G LEFT JOIN BL_T_CB_GSCMFYXB H ON G.FYXMC = H.FYXNR WHERE 1=1 "+fyzgbmsql;String sql2= " UNION SELECT FYXID, FFXID, ZFY, FYXMC, SM FROM BL_T_CB_GGFYXB H LEFT JOIN (SELECT SUM(YSFY) AS ZFY, FYXMC FROM (SELECT F.* FROM (SELECT E.* FROM (SELECT MAX(NODEINSTANCEID) AS NODEINSTANCEID, FLOWINSTANCEID FROM (SELECT * FROM JXD7_WF_NODEINSTANCE WHERE FLOWID = 'B1E7FA2F-E857-4135-8009-47C3159FC9AE' ) GROUP BY FLOWINSTANCEID ) D LEFT JOIN JXD7_WF_NODEINSTANCE E ON D.FLOWINSTANCEID = E.FLOWINSTANCEID WHERE D.NODEINSTANCEID = E.NODEINSTANCEID AND E.FLOWNODEID = '"+flownodeid+"' ) A LEFT JOIN JXD7_WF_FORMINSTANCE B ON A.FLOWINSTANCEID = B.FLOWINSTANCEID LEFT JOIN BL_T_CB_NDBMFYYSBZB C ON B.FORMINSTANCEID = C.FORMINSTANCEID LEFT JOIN BL_T_CB_NDBMFYYSZXB F ON C.YSBH = F.YSBH WHERE 1 = 1 AND BTXBM = '"+btxbm +"'"+ txbmsql+" AND C.YSND = '"+nd+"' ) GROUP BY FYXMC ORDER BY FYXMC ) G ON G.FYXMC = H.FYXNR ";String sql= "";if(!"".equals(nr)){sql1+= " AND FYXMC LIKE '%"+nr+"%'";sql2+= " AND FYXMC LIKE '%"+nr+"%'";}if("公司层面费用".equals(btxbm)){sql= sql1 + " ORDER BY FYXMC ";}else{sql= "SELECT * FROM (" +sql1 + sql2 + ") ORDER BY FYXMC ";}sql= "SELECT * FROM (" + sql + ") WHERE FYXID IS NOT NULL";//过滤无效数据if(btxbm==""){returnrows;}try{RowSet rs=DbOper.executeQuery(sql);while(rs.next()){JSONObject row= newJSONObject();for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {try{row.put(rs.getMetaData().getColumnName(i).toUpperCase(),rs.getObject(i));}catch(JSONException e) {e.printStackTrace();}}rows.put(row);}}catch(SQLException e) {e.printStackTrace();}returnrows;}/*** 返回JSON字符串*@paramnd*@parambtxbm*@paramtxbm*@paramnr*@paramisLD*@return*/public staticString deptJSON(String nd1,String btxbm1,String txbm1,String nr1,String isLD1){nd= nd1;//保存查询条件btxbm =btxbm1;txbm=txbm1;nr=nr1;isLD=isLD1;returndeptJSON_Array(nd1,btxbm1,txbm1,nr1,isLD1).toString();}/*** 将json对象解析成Map对象 <li> * json格式:{"name":"admin","retries":"3fff","testname" * :"ddd","testretries":"fffffffff"}*/  private static HashMap<String, String>JSONOBJECTtoHashMap(JSONObject object)  {  HashMap<String, String> data = new HashMap<String, String>();//将json字符串转换成jsonObjectJSONObject jsonObject =object; Iterator<String> it =jsonObject.keys();//遍历jsonObject数据,添加到Map对象try{while(it.hasNext())  {  String key=it.next();  String value=jsonObject.getString(key);           data.put(key, value);  }  }catch(JSONException e) {//TODO Auto-generated catch block
e.printStackTrace();}returndata;  }/*** 将查询结果转化成ListMap供导出EXCEL使用*@return*/public static List<HashMap>toListMap(){List<HashMap> list = new ArrayList<HashMap>();JSONArray rows=deptJSON_Array(nd,btxbm,txbm,nr,isLD);try{for(int i=0;i<rows.length();i++){HashMap<String, String> map =JSONOBJECTtoHashMap((JSONObject) rows.get(i));list.add(map);}}catch(JSONException e) {//TODO Auto-generated catch block
e.printStackTrace();}returnlist;}
}

将deptJSON_Array和deptJSON分开是因为,在网上没有找到json字符串转化为json对象的包,所以就拆开来,导出的时候使用deptJSON_Array方法可以根据保存的查询条件重新查询,直接输出JSON对象,然后使用JSONOBJECTtoHashMap方法转成hashMap。

之后就符合一列数据一个Map这个数据结构,然后用toListMap方法加到List中即可。

相应的JXLEXAMPLE.JSP中相关代码要改一下:

ArrayList list = (ArrayList)data.get("data"); 

改成

List<HashMap> list = bmfy_zb.toListMap();

以下下代码可以删除

public HashMap SearchEmployees(HttpServletRequest request, HttpServletResponse response) throwsException
{   。。。。。。
}
HashMap data= SearchEmployees(request, response);

导出结果如下:

四、结语

由于涉及到的东西有点杂,怕忘记了所以做以上记录。

转载请注明出处:http://www.cnblogs.com/CryOnMyShoulder/p/7760029.html

转载于:https://www.cnblogs.com/CryOnMyShoulder/p/7760029.html

miniUI ExcelExport导出JAVA实现相关推荐

  1. @excel注解_Excel导入导出Java解决方案推荐

    今天锋哥介绍一款Excel导入导出Java解决方案Easy-POI,以前我们用POI,麻烦点,Easy-POI是封装好的,用起来Easy点,封装过,性能好,所以大伙有空可以研究下: Easy-POI ...

  2. 【微信小程序】云函数使用excel-export导出excel

    1.安装nodejs环境 到官网下载安装包(node-v12.14.1-x64.msi),点击下一步一直安装到底 2.使用命令行模式进入小程序项目云函数文件夹,执行安装excel-export命令,安 ...

  3. 微信小程序云开发:使用excel-export导出excel

    微信小程序云开发:使用excel-export导出excel 前言 关于小程序的excel导出,我也走过了不少坑.之前看了很多人要不使用其他云作为excel的导出工具,要不压根就只是nodejs,而不 ...

  4. [Java]使用jConsole导出java程序的heap dump文件

    [Java]使用jConsole导出Java程序heap dump文件 Heap dump文件存储着在该文件生成时,Java程序的所有未被回收的Objects的信息.通过使用MAT工具,可以揪出内存泄 ...

  5. 微信小程序——使用excel-export导出excel

    背景 在学习微信小程序的过程中,需要导出excel文件数据,可是却没有后台服务器,所以只能够想着使用纯前端去导出excel 使用插件:excel-export 导出思想 将数据封装成excel文件 将 ...

  6. java导出csv小程序_微信小程序——使用excel-export导出excel

    //导出excel functionexportFile(dataHeader,dataList){ wx.showLoading({ title:'正在导出', }); console.log(da ...

  7. miniui excel导出

    1.MiniUI官网的前端导出excel 前端界面: <body> <div style="width: 100%;"><div class=&quo ...

  8. java导出jar带第三方库_在.jar文件中导出java库

    我仍然是 java的新手,我对导出.jar文件非常新.我有一个小游戏,我想发送给一些朋友,我被告知在另一个问题,我应该将它导出到一个可执行的jar文件.好吧,我终于在我的计算机上工作了但是当我把它发送 ...

  9. maven导出Java方法_eclipse导出maven工程的可执行jar包

    一.eclipse导出maven工程的可执行jar包 建立两个maven工程 ZKServer 和ZKClient 注意:用maven进行开发管理的话,默认的打出来的jar包是不能运行的,需要在pom ...

  10. Luckysheet 导入导出 - Java后台处理和js前端实现

    luckysheet 官方群:926131495 无图无真相,所以先看视频效果吧:https://b23.tv/IzhaTv.协同演示与历史记录 目前已经实现导出有三种方案.Java后台方式基于模板导 ...

最新文章

  1. Java五年,已财富自由,美人在手!
  2. 一些数据库优化经验资料整理
  3. hgameweek4 secret
  4. Mac电脑配置Alfred、Go2shell、iTerm2+Oh My Zsh
  5. 2020-2021年度第二届全国大学生算法设计与编程挑战赛 (春季赛)- 天才的操作(线段树+主席树+树上倍增)
  6. 微信小程序之视图容器(swiper)组件创建轮播图
  7. react学习(45)----react组件
  8. leetcode 300. 最长上升子序列
  9. TensorFlow2.0:张量限幅
  10. xmpp安装到Linux服务器,在Ubuntu 18.04/16.04系统中安装Ejabberd XMPP Server的方法
  11. java后端服务运行原理_web服务的后台工作原理
  12. 【数据仓库】数据仓库设计前如何粗估所需的存储空间大小?
  13. 末日帝国——Agile公司的困境 (5)
  14. 泛微e9隐藏明细表_泛微Ecology权限整理大全,相当全要点
  15. 计算机网络波特率公式,传输速率——比特率和波特率
  16. Java面试题及答案2019版(下),mysql事务隔离级别原理
  17. MySQL自动删除指定时间以前的记录
  18. jq.ajax+php+mysql实现瀑布流缓冲加载数据
  19. 再论关于如何学习网络编程
  20. 将传统书房变成数字书房 数字书房DIY

热门文章

  1. AXI 基础第 4 讲 - 使用 AXI VIP 作为 AXI4 主接口的协议检查工具
  2. 基于Java+SpringBoot+Thymeleaf+Mysql在线外卖点餐系统设计与实现
  3. 2019华为软件精英挑战赛总结篇
  4. 系统的可靠性分析与设计---可靠性的概述
  5. 图灵测试其实已经过时了
  6. 千帆竞发势如虹 明光政策送东风 首届明光大赛来了
  7. MATLAB 数学应用 初等数学 绘制虚数和复数数据图
  8. 三层交换机划分VLAN
  9. Android终于要推出Google官方的二维码扫描库了?
  10. ros launch中的节点工作空间路径