首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

struts2导出excel札记

2012-11-04 
struts2导出excel笔记??l例子很简单,就一个Action类和一个Service类?1.所需jar包struts2需要jar包:commons

struts2导出excel笔记

?

?

l例子很简单,就一个Action类和一个Service类

?

1.所需jar包

struts2需要jar包:commons-logging.jar、freemarker-2.3.8.jar、ognl-2.6.11.jar、struts2-core-2.0.11.1.jar、xwork-2.0.4.jar

excel导出:jxl.jar

2.配置

   .....                        <filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>  ......
?
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" ><struts><package name="platform-default" extends="struts-default"><action name="excel" type="stream"><param name="contentType">application/vnd.ms-excel</param><param name="inputName">excelStream</param><param name="contentDisposition">filename="export.xls"</param><param name="bufferSize">1024</param></result></action></package></struts>

3.Action实现

?

package action;import java.io.InputStream;import service.IExcelService;import service.impl.ExcelServiceImpl;public class ExcelAction {InputStream excelStream;public String execute(){IExcelService es = new ExcelServiceImpl();excelStream = es.getExcelInputStream();return "excel";}//get set...}

4.Service实现

a.接口

?

package service;import java.io.InputStream;public interface IExcelService {InputStream getExcelInputStream();}

b.实现类

?

package service.impl;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.io.OutputStream;import jxl.Workbook;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import service.IExcelService;public class ExcelServiceImpl implements IExcelService {@Overridepublic InputStream getExcelInputStream() {//将OutputStream转化为InputStreamByteArrayOutputStream out = new ByteArrayOutputStream();putDataOnOutputStream(out);return new ByteArrayInputStream(out.toByteArray());}private void putDataOnOutputStream(OutputStream os) {jxl.write.Label label;WritableWorkbook workbook;try {workbook = Workbook.createWorkbook(os);WritableSheet sheet = workbook.createSheet("Sheet1", 0);label = new jxl.write.Label(0, 0, "struts2导出excel");sheet.addCell(label);workbook.write();workbook.close();} catch (Exception e) {e.printStackTrace();}}}

?

?这样例子就完成了:

直接访问:http://127.0.0.1:8080/excel/excel.action 就可以导出excel

?

说明:

1、例子中OutputStream转InputStream是一种简单的实现,但是需要内存比较多,可以参考:
http://ostermiller.org/convert_java_outputstream_inputstream.html

2、参考实现:http://merrygrass.iteye.com/blog/558274

3、java报表JXL和POI打印设置

?

代码在附件中,jar包自己下载后导入即可

?

?

问题:

?

//横向打印sheet.getSettings().setOrientation(PageOrientation.LANDSCAPE);//默认行高(似乎不起作用)sheet.getSettings().setDefaultRowHeight(510);//设置行宽sheet.getSettings().setDefaultColumnWidth(10);

横向设置和行宽起作用,但行高不起作用,望高手回答

?

---------------------------------------------

默认行高问题解决:

此方法针对excel2003,在创建sheet后,添加如下代码

?

for(int i=0;i<65536;i++){sheet.setRowView(i, 360);}

?补充:jxl中20个高度对应excel的1个高度,jxl的1个宽度对应excel的7个宽度

?

?

?

?--EOF--

?

1 楼 andy0305 2012-08-18   怎么不能导出呢?部署工程输入地址以后只是乱码 2 楼 andy0305 2012-08-18   可以的哈 刚才没有设置工程的编码

热点排行