SSI框架下,用jxl实现导出功能
SSI框架下,用jxl实现导出功能
先说明一下,这个是SSI框架下,前端用ExtJs,应用在一个企业级的系统中的导出功能,因为是摸索着做的,所以里面有一些代码想整理一下,如果有人看到了,请视自己的架构酌情借用
JS获取查询条件并跳转页面
//eform中按钮的click事件js
var wtly = comboBox.lastSelectionText;//问题来源
if(wtly==undefined)
wtly="";
var fxwt = searchField_fxwt.getValue();//分析问题
var whyslb = comboBox_1.lastSelectionText;//不安全行为类别
if(whyslb==undefined)
whyslb="";
var wzxwlb = comboBox_2.lastSelectionText;//违章类型类别
if(wzxwlb==undefined)
wzxwlb="";
var wzxz = comboBox_3.lastSelectionText;//违章性质
if(wzxz==undefined)
wzxz="";
var fxr = searchField_fxr.getValue();//发现人
var fxsjStart = searchField_fxsj.getValue();//开始时间
var fxsjEnd = dateField.getValue();//结束时间
var url='doBzaqAqjcZcxwAction_expWorkList?fxr='+fxr+'&wtly='+wtly+'&fxwt='+fxwt+'&whyslb='+whyslb+'&wzxwlb='+wzxwlb+'&wzxz='+wzxz+'&fxsjStart='+fxsjStart+'&fxsjEnd='+fxsjEnd;
window.location.href =url;
下面是Spring 中配置相关的业务层和DAO层
//Spring applicationContext注入相关的service,dao
<!-- 次日高风险作业表的配置 -->
<bean id="BzaqXxglCrgfxzybAction" class="md.bzaq.xxbs.crgfx.action.BzaqXxglCrgfxzybAction" scope="prototype">
<property name="bzaqXxglCrgfxzybService">
<ref bean="bzaqXxglCrgfxzybService" />
</property>
<property name="bzaqAqjcZcxwService">
<ref bean="bzaqAqjcZcxwService" />
</property>
<property name="bzaqAqjcZczzService">
<ref bean="bzaqAqjcZczzService" />
</property>
<property name="bzaqAqjcZcglService">
<ref bean="bzaqAqjcZcglService" />
</property>
</bean>
<bean id="bzaqXxglCrgfxzybService" class="md.bzaq.xxbs.crgfx.service.BzaqXxglCrgfxzybServiceImpl">
<property name="bzaqXxglCrgfxzybDao">
<ref bean="bzaqXxglCrgfxzybDao" />
</property>
</bean>
<bean id="bzaqXxglCrgfxzybDao" class="md.bzaq.xxbs.crgfx.dao.BzaqXxglCrgfxzybDAOImpl">
<property name="sqlMapClientTemplate" ref="sqlMapClientTemplate" />
</bean>
下面是后台控制层处理查询数据以及导出数据
//Controller 后台Action中的方法
public void expWorkList(){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");//小写的mm表示的是分钟
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM");//小写的mm表示的是分钟
Date today = new Date();
//定义查找对象
BzaqAqjcXwhzSearch bzaqAqjcXwhzSearch= new BzaqAqjcXwhzSearch();
try {
//解码,并且将参数存入查找对象中
if(fxr!=null&&!"".equals(fxr)){
fxr = java.net.URLDecoder.decode(fxr,"utf-8");//
bzaqAqjcXwhzSearch.setFxr(fxr);
}
if(wtly!=null&&!"".equals(wtly)){
wtly = java.net.URLDecoder.decode(wtly,"utf-8");
bzaqAqjcXwhzSearch.setWtly(wtly);
}
if(fxwt !=null&&!"".equals(fxwt )){
fxwt = java.net.URLDecoder.decode(fxwt ,"utf-8");
bzaqAqjcXwhzSearch.setFxwt(fxwt);
}
if(whyslb!=null&&!"".equals(whyslb)){
whyslb = java.net.URLDecoder.decode(whyslb,"utf-8");
bzaqAqjcXwhzSearch.setWhyslb(whyslb);
}
if(wzxwlb !=null&&!"".equals(wzxwlb)){
wzxwlb = java.net.URLDecoder.decode(wzxwlb ,"utf-8");
bzaqAqjcXwhzSearch.setWzxwlb(wzxwlb);
}
if(wzxz !=null&&!"".equals(wzxz )){
wzxz = java.net.URLDecoder.decode(wzxz ,"utf-8");
bzaqAqjcXwhzSearch.setWzxz(wzxz );
}
if(fxsjStart !=null&&!"".equals(fxsjStart )){
bzaqAqjcXwhzSearch.setFxsjStart(fxsjStart );
}
if(fxsjEnd!=null&&!"".equals(fxsjEnd)){
bzaqAqjcXwhzSearch.setFxsjEnd(fxsjEnd);
}
if(sfww!=null&&sfww.equals("是")){
bzaqAqjcXwhzSearch.setSfww("是");
}
} catch (UnsupportedEncodingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
//排序属性
bzaqAqjcXwhzSearch.setOrderByClause(" fxsj desc");
HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
String filePath=request.getSession().getServletContext().getRealPath("/");//模板路径
String fileName = "行为违章.xls";//导出文件名
if(ServletActionContext.getRequest().getHeader( "USER-AGENT" ).toLowerCase().indexOf( "msie" ) > 0 ){
try {
fileName =java.net.URLEncoder.encode(fileName,"utf-8");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
filePath=filePath.replaceAll("\\\\", "/");//模板路径
filePath = filePath + "docs/xwwz.xls";//模板路径
InputStream is;
//所有的任务清单
List bzaqAqjcZcxwList = new ArrayList();
try {
is = new FileInputStream(filePath);
//Workbook为只读
jxl.Workbook wb = jxl.Workbook.getWorkbook(is);
//WritableWorkbook为可写入。
//将WritableWorkbook直接写入到输出流。
HttpServletResponse response = (HttpServletResponse)ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);
OutputStream os = response.getOutputStream();
jxl.write.WritableWorkbook wbook = jxl.Workbook.createWorkbook(os,wb);
//可写入的单元格格式。
jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(); // 单元格定义
wcf.setBackground(jxl.format.Colour.BLACK); // 设置单元格的背景颜色
WritableFont font = new WritableFont(WritableFont.createFont("宋体"),10);//设置字体
wcf.setFont(font);
wcf.setAlignment(jxl.format.Alignment.LEFT); // 设置对齐方式左右居中
wcf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);// 设置对齐方式上下居中
wcf.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);
wcf.setWrap(true);
//工作表。
jxl.write.WritableSheet wsheet = wbook.getSheet(0);
wsheet.setName("行为违章.xls");
jxl.write.Label label = null;
//任务清单列表数据
bzaqAqjcZcxwList = bzaqAqjcZcxwService.getBzaqAqjcZcxwshz1(bzaqAqjcXwhzSearch);//查出要导出的数据
int rwrows = 2;
if(bzaqAqjcZcxwList.size()>0){
for(int i=0;i<bzaqAqjcZcxwList.size();i++){
BzaqAqjcXwhz obj=(BzaqAqjcXwhz)bzaqAqjcZcxwList.get(i);
label =new jxl.write.Label(0,rwrows+i ,obj.getFxwt(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(1,rwrows+i ,obj.getWzxz(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(2,rwrows+i ,obj.getWzxwlb(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(3,rwrows+i ,obj.getZrdw(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(4,rwrows+i ,obj.getZrbm(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(5,rwrows+i ,obj.getZrbz(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(6,rwrows+i ,obj.getSfww(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(7,rwrows+i ,obj.getZrr(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(8,rwrows+i ,obj.getJzqk(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(9,rwrows+i ,obj.getZrrjf(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(10,rwrows+i ,obj.getZrrcfje(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(11,rwrows+i ,obj.getLdkhzrr(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(12,rwrows+i ,obj.getLdkhje(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(13,rwrows+i ,obj.getWzyyfx(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(14,rwrows+i ,obj.getJzyfcs(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(15,rwrows+i ,obj.getJcbm(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(16,rwrows+i ,obj.getZw(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(17,rwrows+i ,obj.getFxr(),wcf);
wsheet.addCell(label);
label =new jxl.write.Label(18,rwrows+i ,obj.getWtly(),wcf);
wsheet.addCell(label);
Date fxsj = obj.getFxsj();
if(fxsj !=null)
{
label =new jxl.write.Label(19,rwrows+i ,sdf.format(obj.getFxsj()),wcf);
wsheet.addCell(label);
}
if(obj.getYf()!=null)
{
label =new jxl.write.Label(20,rwrows+i ,sdf1.format(obj.getYf()),wcf);
wsheet.addCell(label);
}
label =new jxl.write.Label(21,rwrows+i ,obj.getWhyslb(),wcf);
wsheet.addCell(label);
}
}
///////在这里继续加第二个sheet页///////
jxl.write.WritableSheet wsheet = wbook.getSheet(1);
//获取客户端浏览器和操作系统信息
if(ServletActionContext.getRequest().getHeader( "USER-AGENT" ).toLowerCase().indexOf( "msie" ) > 0 ){
response.setHeader("Content-Disposition", "attachment; filename="+fileName);
}else{
response.addHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes("GB2312"),"ISO-8859-1"));
}
response.setContentType("application/vnd.ms-excel");
wbook.write();
wbook.close();
os.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
模板
在对应的路径下,做一个对应文件名的EXCEL模板,SHEET页和标题,以及各字段的数据类型要和后台查出来的一致;
SSI框架下,用jxl实现导出功能的更多相关文章
- 在Spring Boot框架下使用WebSocket实现聊天功能
上一篇博客我们介绍了在Spring Boot框架下使用WebSocket实现消息推送,消息推送是一对多,服务器发消息发送给所有的浏览器,这次我们来看看如何使用WebSocket实现消息的一对一发送,模 ...
- TP5框架下实现数据库的备份功能-tp5er/tp5-databackup
1.安装扩展 方法一: composer require tp5er/tp5-databackup dev-master 方法二 composer.json: "require": ...
- Jxl、JxCell图表导出功能的实现
最近接触过许多报表导出功能,也用过多种工具进行导出功能的实现,但对于图表的导出一直没有仔细的去展开研究和探讨,直到最近略微整理了下这方面的需求和技术攻克. 首先导出excel功能的实现主要有JXL.J ...
- laravel框架excel 的导入导出功能
1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. ...
- 关于在Struts2框架下实现文件的上传功能
struts2的配置过程 (1)在项目中加入jar包 (2)web.xml中filter(过滤器)的配置 <?xml version="1.0" encoding=" ...
- 在.Net Core WebAPI下给Swagger增加导出离线文档功能
一丶前言 最近刚接触到Swagger,在github上下载了它的源码和demo学习了一遍,发现这个组件非常好用,不过不足的是它没有导出离线文档的功能,于是乎我就想给它加一个导出功能 Swagger G ...
- Yii2框架GridView自带导出功能最佳实践
1. 导出excel的实现方法 (1)使用phpexcel封装工具类导出excel (2)使用爬虫爬取页面再处理封装工具类导出excel (3)使用页面渲染后处理html添加头部信息生成excel文件 ...
- office在繁体系统下 导入导出 功能灰显的解决方法
当在win7系统使用繁体中文版的office时,或系统是繁体版时,可能会导致office的导入导出功能无法使用 解决方法: 控制面板--区域和语言--格式--中文简体
- SSH框架使用poi插件实现Excel的导入导出功能
采用POI生成excel结构 直接贴出代码 excel表格导出功能 action代码: struts.xml配置: 前台jsp代码:
随机推荐
- Textchangedlistener的用法
searchet.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequ ...
- LeetCode 887.鸡蛋掉落(C++)
每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去. 你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的 ...
- Kure讲HTML_div标签和table标签
为什么要把这两个标签放在一起讲? 个人认为div标签可以算是一个万能标签,它可以通过CSS(层叠样式表)来模仿表格的形式来生成一个表格.那么很多人可能会疑惑那在开发的时候,到底是用div+css的形式 ...
- 关于Yahoo十四条军规与前端性能优化
关于Yahoo十四条军规与前端性能优化 热度 4已有 223 次阅读2014-8-3 15:01 |个人分类:前端相关|系统分类:前端优化| 前端优化, yahoo, 性能优化 启用Gzip压缩.Gz ...
- PHP substr()函数
PHP substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函数,mb_substr() /mb_strcut的用法 ...
- c# 父类的引用指向子类的实例
在C#中关于父类对子类的引用大概有这么几种: 父类是接口,普通类,抽象类 public interface A { void a(); } public class B { public void b ...
- 浅谈python的深浅拷贝
python中有两种数据类型:一种是可变数据类型,一种是不可变数据类型 不可变数据类型包括(整型及其他数据类型,字符串及元组) 可变数据类型(列表,集合,字典,类和类实例) 鉴定是否为拷贝还是只是引用 ...
- 如何查询mysql中date类型的时间范围记录?
java date类型 会不会自动转换 mysql date类型? 抹除掉后面 时间 ? 时间不是查询条件?
- TeamViewer 软件完全卸载
TeamViewer 软件似乎用于商业环境中 - 彻底卸载 Windows 1. 检测为商业用途该软件似乎用于商业环境中.请注意:免费版仅供个人使用.您的会话将在 5 分钟后终止. 2.1 Close ...
- Google面试准备
本人小弱,面试过了Google的HC,虽然team match还没完成,到最后还有变数.但对自己这段时间的努力,也算一个交代了. 最初是一年半前Google的HR联系到我,然后第一次在电面就挂了.经过 ...