jfinal中excel表格导出
今天工作中遇到了excel表格导出的操作,还好有写好的模板,不然我也是焦头烂额,下面记录一下excel表格导出的操作步骤,同时用来给正在学习jfinal的小伙伴一些参考和学习。
首先我们需要把表格查询出并且显示在页面上,下面是页面跳转时经过的Controller:(这里包含条件查询,所以获取信息比较复杂,全部查询只需要将获取到的pageUtils 传到前台即可,不需要添加多余的查询条件,在这里传给前台的变量名我叫他page)
public void index(){
PageUtils pageUtils = getPageParameter();
String where = " where 1=1 ";
//获取当前时间
String nowDate =DateUtils.getDate();
if(pageUtils.getMap().get("orderNo")!=null&&!pageUtils.getMap().get("orderNo").toString().trim().equals("")){
where = where + " and order_no like '%"+pageUtils.getMap().get("orderNo")+ "%' ";
}
if(pageUtils.getMap().get("customerName")!=null&&!pageUtils.getMap().get("customerName").toString().trim().equals("")){
where = where + " and customer_name like '%"+pageUtils.getMap().get("customerName")+"%'";
} if(pageUtils.getMap().get("shipmentDate")!=null&&!pageUtils.getMap().get("shipmentDate").toString().trim().equals("")){
where = where + " and shipment_date = '"+pageUtils.getMap().get("shipmentDate")+"'";
}
if(pageUtils.getMap().get("isship")!=null&&!pageUtils.getMap().get("isship").toString().trim().equals("")){
if(pageUtils.getMap().get("isship").equals("1")){
where = where + " and Tknum is not null ";
}else if (pageUtils.getMap().get("isship").equals("3")){
where = where + " and ship_type!=5 and arrive_date<'"+nowDate+"' ";
}else{
where = where + " and Tknum is null ";
}
}
if(pageUtils.getMap().get("shipType")!=null&&!pageUtils.getMap().get("shipType").toString().trim().equals("")){
if(pageUtils.getMap().get("shipType").equals("1")){
where = where + " and ship_type =5 ";
}else{
where = where + " and ship_type !=5 ";
}
}
if(pageUtils.getMap().get("ishd")!=null&&!pageUtils.getMap().get("ishd").toString().trim().equals("")){
if(pageUtils.getMap().get("ishd").equals("1")){
where = where + " and img is not null ";
}else{
where = where + " and img is null ";
}
}
where += " order by arrive_date desc ";
pageUtils.initialize(TMSOrderList.dao.paginate(pageUtils.getPageNo(),
pageUtils.getPageSize(), "select * ",
" from TMS_Order_List"+where+ pageUtils.getOrderBySql()));
if(pageUtils.getList().size()==0&&pageUtils.getPageNo()!=1){
pageUtils.setPageNo(1); pageUtils.initialize(TMSOrderList.dao.paginate(pageUtils.getPageNo(),
pageUtils.getPageSize(), "select * ",
" from TMS_Order_List "+where+pageUtils.getOrderBySql()));
} setAttr("page", pageUtils);
setAttr("nowDate", nowDate);
render("reportList.jsp");
}
在上面我们获取到了表格信息(实体类和model我就不用写了吧),这里传到前台两个变量,和一个需要返回的页面,这里当前时间你们可能不需要,之后就是在页面接收这个值:(这里因为连表查询所以将page这个值拆开了两次,如果不
需要链表,直接<c:foreach>循环输出就好了,不需要<c:set>)
<input id="btnSubmit" class="btn btn-primary" type="button" value="导出" onclick="exportExcel()"/>
<table id="contentTable" class="table table-striped table-bordered table-condensed">
<thead>
<tr>
<th style="text-align: center;"><input id="checkAll" type="checkbox"/>序号</th>
<th style="text-align: center;">发运客户</th>
<th style="text-align: center;">订单号</th>
<th style="text-align: center;">装货日期</th>
<th style="text-align: center;">预计送达日期</th>
<th style="text-align: center;">运输类型</th>
<th style="text-align: center;">装货地址</th>
<th style="text-align: center;">装货联系人</th>
<th style="text-align: center;">装货联系方式</th>
<th style="text-align: center;">物料描述</th>
<th style="text-align: center;">装货数量</th>
<th style="text-align: center;">装货重量(KG)</th>
<th style="text-align: center;">装货体积(M3)</th>
<th style="text-align: center;">包装规格</th>
<th style="text-align: center;">到达省份</th>
<th style="text-align: center;">到达城市</th>
<th style="text-align: center;">收货客户</th>
<th style="text-align: center;">收货地址</th>
<th style="text-align: center;">收货联系人</th>
<th style="text-align: center;">收货联系方式</th>
<th style="text-align: center;">单价</th>
<th style="text-align: center;">应收运费</th>
<th style="text-align: center;">附加费用</th>
<th style="text-align: center;">合计运费</th>
<th style="text-align: center;">承运商</th>
<th style="text-align: center;">承运商联系方式</th>
<th style="text-align: center;">承运车辆</th>
<th style="text-align: center;">驾驶员</th>
<th style="text-align: center;">驾驶员联系方式</th>
<th style="text-align: center;">应付运费</th>
<th style="text-align: center;">预付运费</th>
<th style="text-align: center;">回付运费</th>
<th style="text-align: center;">附加费用</th>
<th style="text-align: center;">附加费单号</th>
<th style="text-align: center;">合同单号</th>
<th style="text-align: center;">备注</th>
</tr>
</thead>
<tbody id="pBody">
<c:forEach items="${page.list}" var="item" varStatus="index">
<c:set value="${item.client}" var="client"></c:set>
<c:set value="${item.vttkManual}" var="vttkManual"></c:set>
<tr>
<td>
<input id="checkbox${item.id}" name="checkbox" type="checkbox" value="${item.id}" onchange="selected(this.value)"/>
${index.index+1}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.customername}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.orderno}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.shipmentdate}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.arrivedate}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.shiptype}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.shipmentaddress}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.shipmentlinkman}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.shipmenttelephone}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.materialdescription}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.shipmentqty}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.shipmentweight}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.shipmentbulk}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.packagesize}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.province}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.city}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${client.clientName}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${client.clientAddress}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${client.linkman}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${client.telphone}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.unitprice}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.receivablecharge}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.additionalcharge}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${item.totalcharge}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${vttkManual.name1}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;"></td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${vttkManual.signi}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;"></td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;"></td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${vttkManual.receivablefreight}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${vttkManual.advancefreight}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${vttkManual.backfreight}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${vttkManual.additionalfreight}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${vttkManual.additionalnumber}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${vttkManual.contract}</td>
<td style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${vttkManual.bezei}</td>
</tr>
</c:forEach>
</tbody>
</table>
之后就是重点了,excel表格导出,我们可以看到这个页面的最顶端有个导出按钮,导出按钮监听了点击事件onclick="exportExcel()",之后我们可以在页面的上方写JavaScript写一个方法:
function exportExcel (){
$("#searchForm").attr("action","${ctx}/tms/report/exportExcel").submit();
}
这里写的这个方法是跳转到tms下面report这个controller下的exportExcel方法,这个方法是这样写的:
/**
* 导出excel
*/
public void exportExcel(){
// List<VttkManual> list=VttkManual.dao.find("select * from L2C_VTTK");
List<TMSOrderList> list = TMSOrderList.dao.find("select * from TMS_Order_List");
//Excel生成工具
ExcelExport excelExport = new ExcelExport();
String[] listName = {"发运客户"," 订单编号 "," 装货日期","预计送达日期 ","运输类型 ","装货地址","装货联系人",
"装货联系方式","物料描述 ","装货数量","装货重量 (KG)","装货体积(m3) ","包装规格",
"到达省份","到达城市 ","收货客户","收货地址","收货联系人 ","收货联系方式",
"单价","应收运费","附加费用","合计运费","承运商","承运商联系方式 ","承运车辆",
"驾驶员 ","驾驶员联系方式 ","应付运费","预付运费","回付运费 ","附加费用","附加费单号 ",
"合同单号","备注"};
Map<Integer, Object> excelMap = excelExport.createTable("列表", listName); HSSFCellStyle style = ((HSSFWorkbook) excelMap.get(3)).createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); HSSFRow row = null;
HSSFCell cells = null;
for (int i = 0; i < list.size(); i++){
row = ((HSSFSheet)excelMap.get(2)).createRow(i + 1);
// VttkManual vm = list.get(i);
// TMSOrderList order=TMSOrderList.dao.findFirst("select * from TMS_Order_List " +
// "where order_no='"+vm.getVbeln()+"'");
TMSOrderList order = list.get(i);
VttkManual vm = VttkManual.dao.findFirst("select * from L2C_VTTK where Vbeln='"+order.getOrderno()+"'"); cells = row.createCell(0);
cells.setCellValue(order.getCustomername());
cells.setCellStyle(style); cells = row.createCell(1);
cells.setCellValue(order.getOrderno());
cells.setCellStyle(style); cells = row.createCell(2);
cells.setCellValue(order.getShipmentdate());
cells.setCellStyle(style); cells = row.createCell(3);
cells.setCellValue(order.getArrivedate());
cells.setCellStyle(style); cells = row.createCell(4);
cells.setCellValue(order.getShipmenttype());
cells.setCellStyle(style); cells = row.createCell(5);
cells.setCellValue(order.getShipmentaddress());
cells.setCellStyle(style); cells = row.createCell(6);
cells.setCellValue(order.getShipmentlinkman());
cells.setCellStyle(style); cells = row.createCell(7);
cells.setCellValue(order.getShipmenttelephone());
cells.setCellStyle(style); cells = row.createCell(8);
cells.setCellValue(order.getMaterialdescription());
cells.setCellStyle(style); cells = row.createCell(9);
cells.setCellValue(order.getShipmentqty()==null?"":order.getShipmentqty().toString());
cells.setCellStyle(style); cells = row.createCell(10);
cells.setCellValue(order.getShipmentweight()==null?"":order.getShipmentweight().toString());
cells.setCellStyle(style); cells = row.createCell(11);
cells.setCellValue(order.getShipmentbulk()==null?"":order.getShipmentbulk().toString());
cells.setCellStyle(style); cells = row.createCell(12);
cells.setCellValue(order.getPackagesize());
cells.setCellStyle(style); cells = row.createCell(13);
cells.setCellValue(order.getProvince());
cells.setCellStyle(style); cells = row.createCell(14);
cells.setCellValue(order.getCity());
cells.setCellStyle(style); if(order.getClient()!=null){
cells = row.createCell(15);
cells.setCellValue(order.getClient().getClientName());
cells.setCellStyle(style); cells = row.createCell(16);
cells.setCellValue(order.getClient().getClientAddress());
cells.setCellStyle(style); cells = row.createCell(17);
cells.setCellValue(order.getClient().getLinkman());
cells.setCellStyle(style); cells = row.createCell(18);
cells.setCellValue(order.getClient().getTelphone());
cells.setCellStyle(style);
} cells = row.createCell(19);
cells.setCellValue(order.getUnitprice()==null?"":order.getUnitprice().toString());
// cells.setCellValue("");
cells.setCellStyle(style); cells = row.createCell(20);
cells.setCellValue(order.getReceivablecharge()==null?"":order.getReceivablecharge().toString());
// cells.setCellValue("");
cells.setCellStyle(style); cells = row.createCell(21);
cells.setCellValue(order.getAdditionalcharge()==null?"":order.getAdditionalcharge().toString());
// cells.setCellValue("");
cells.setCellStyle(style); cells = row.createCell(22);
cells.setCellValue(order.getTotalcharge()==null?"":order.getTotalcharge().toString());
// cells.setCellValue("");
cells.setCellStyle(style); cells = row.createCell(23);
cells.setCellValue(vm.getName1());
cells.setCellStyle(style); cells = row.createCell(24);
cells.setCellValue(vm.getTelephone1());
cells.setCellStyle(style); cells = row.createCell(25);
cells.setCellValue(vm.getSigni());
cells.setCellStyle(style); cells = row.createCell(26);
cells.setCellValue(vm.getDriver());
cells.setCellStyle(style); cells = row.createCell(27);
cells.setCellValue(vm.getTelephone2());
cells.setCellStyle(style); cells = row.createCell(28);
cells.setCellValue(vm.getReceivablefreight());
cells.setCellStyle(style); cells = row.createCell(29);
cells.setCellValue(vm.getAdvancefreight());
cells.setCellStyle(style); cells = row.createCell(30);
cells.setCellValue(vm.getBackfreight());
cells.setCellStyle(style); cells = row.createCell(31);
cells.setCellValue(vm.getAdditionalfreight());
cells.setCellStyle(style); cells = row.createCell(32);
cells.setCellValue(vm.getAdditionalnumber());
cells.setCellStyle(style); cells = row.createCell(33);
cells.setCellValue(vm.getContract());
cells.setCellStyle(style); cells = row.createCell(34);
cells.setCellValue(vm.getBezei());
cells.setCellStyle(style);
} // 第六步,将文件存到指定位置
try{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
String code = sdf.format(new Date());
String fileName = "订单全部明细"+code+".xls";
String path = JFinal.me().getConstants().getFileRenderPath();//获取项目配置下载路径
path = path.replace("\\","/");
FileOutputStream fout = new FileOutputStream(path+"/"+fileName);
((HSSFWorkbook)excelMap.get(3)).write(fout);
fout.close();
addMessageSuccess("导出成功"); renderFile(fileName); }catch (Exception e){
e.printStackTrace();
addMessageError("导出失败");
redirect("/tms/report");
}
}
之后大概就都懂了把,最上面String[] listName 是每列的字段名,下面
cells = row.createCell(0);代表的是当前列数;
cells.setCellValue(order.getCustomername());代表的是当前列插入的内容;
cells.setCellStyle(style);代表当前单元格内的样式
下面配置好路径就可以道出了,导出成功之后页面会提示你保存的路径,保存之后就可以查看了,是不是很简单呢
jfinal中excel表格导出的更多相关文章
- 关于Java中excel表格导出的总结(Java程序导出模板和Java根据模板导出表格两种实现方式)
导出excel通用模板(程序定义模板导出) 转载原文:https://www.jianshu.com/p/5c7b359a159c 如下代码,本方法主要用于程序定义模板格式,并导出文件.该方法将定义和 ...
- 利用Apache POI 实现简单的Excel表格导出
1.利用POI API实现简单的Excel表格导出 首先假设一个学生实体类: package com.sun.poi.domain; import java.io.Serializable; impo ...
- excel表格导出之后身份证号列变成了科学计数法
excel表格导出之后身份证号列变成了科学计数法 解决:写sql查询出所有数据,并在身份证列添加字符,然后导出,将要复制的excel表格设置单元格格式问文本类型,然后复制粘贴,再把加入的字符删除,搞定 ...
- vue中excel导入导出组件
vue中导入导出excel,并根据后台返回类型进行判断,导入到数据库中 功能:实现js导入导出excel,并且对导入的excel进行展示,当excel标题名称和数据库的名称标题匹配时,则对应列导入的数 ...
- JeeSite中Excel导入导出
在各种管理系统中,数据的导入导出是经常用到的功能,通常导入导出以Excel.CSV格式居多.如果是学习的过程中,最好是自己实现数据导入与导出的功能,然而在项目中,还是调用现成的功能比较好.近期一直使用 ...
- python中excel表格的读写
#!usr/bin/env python #-*- coding:utf-8 -*- import xlrd import xlwt from xlutils.copy import copy imp ...
- 在react项目中实现表格导出为Excel
需求背景 数据表格有时需要增加导出Excel功能,大多数情况下都是后端出下载接口,前端去调用. 对于数据量少的数据,可以通过前端技术实现,减少后端工作. 实现方式 使用插件--xlsx 根据自己项目情 ...
- java实现excel表格导出数据
/** * 导出清单 eb中 firstRow(EntityBean) 列表第一行数据,键值对(不包含序号)例:("name","姓名") * data(Ent ...
- 由Excel表格导出Latex代码
Latex提供了不少绘制表格的宏包(参见:http://tug.org/pracjourn/2007-1/mori/),但在latex里画表并不直观,特别是在表格比较大的时候,有时候也需要先用Exce ...
随机推荐
- Java 程序员必备的 15 个框架,前 3 个地位无可动摇!
Java 程序员方向太多,且不说移动开发.大数据.区块链.人工智能这些,大部分 Java 程序员都是 Java Web/后端开发.那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢? 今天 ...
- python的函数学习2
名称空间 用来存放名字的地方,有三种名称空间:内置名称空间,全局名称空间,局部名称空间. 比如执行test.py: python test.py .python解释器先启动,因而首先加载内置名称空间 ...
- Linux 下 Shell 的自动交互
在编写脚本的时候经常会遇到这种情况,某些程序的命令执行的之后可能会要求用户进行输入,这个时候就需要一些特殊写法来应对这种问题了.这里参考 这篇文章提到可以使用 delimiter 分界符来解决. 也就 ...
- MapReduce实现ReduceSideJoin操作
本文转载于:http://blog.csdn.net/xyilu/article/details/8996204 一.准备两张表以及对应的数据 (1)m_ys_lab_jointest_a(以下简称表 ...
- intellij idea maven project 无法显示dependencies
Intellj 自动载入Mave依赖是一个很人性化的功能,但不排除有时候会碰到问题,导致pom文件修改却没有触发自动重新载入的动作或者加载中途出现弱网的情况中断载入的,此时需要手动强制更新依赖. 如下 ...
- JAVA UUID 生成唯一标识
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want 需求 项目在设计表的时候,要处理并发多的一些数据 ...
- MySQL批量插入数据的几种方法
最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...
- Maven内置属性、POM属性
1.内置属性(Maven预定义,用户可以直接使用) ${basedir}表示项目根目录,即包含pom.xml文件的目录; ${version}表示项目版本; ${project.basedir}同${ ...
- MFC控件GDI编程
MFC控件GDI编程 一丶学习内容 1.了解常用的GDI函数绘图. 2.使用常用的画笔画刷. 二丶常用的GDI函数绘图 上方则为我们常用的GDI函数了. 画线 矩形. 以及圆 等等. 2.1 画线代码 ...
- 插槽slot
主要是让组件的可扩展性更强.1.匿名slot使用 //定义组件my-component <div class="myComponent"> <slot>&l ...