文档章节

使用Jxls操作Excel的方式,针对excel中的数据为List/Map,或非List组合的操作

lgscofield
 lgscofield
发布于 2015/06/26 13:58
字数 512
阅读 92
收藏 0
Jxls操作excel的时候,数据里面同时有规则的List/Map数据,同时又有不规则的,零星组织的数据,在这里,统统可以用此方法解决,具体方法如下,包括完整的类文件,导出Excel的时候需要有一个模板,模板中的各项数据请使用EL表达式的方式${list.userName...}诸如此类方式即可写入值...
//#################start##################//
public class JxlsResult extends StrutsResultSupport {
    /**
     * 
     */
    private static final long serialVersionUID = -9095565761135848980L;
    private String fileName;
    private String root;

    public JxlsResult() {
        super();
    }

    public JxlsResult(String location) {
        super(location);
    }

    @SuppressWarnings("unchecked")
    protected void doExecute(String location, ActionInvocation invocation)
            throws Exception {
        HttpServletResponse response = (HttpServletResponse) invocation
                .getInvocationContext().get(StrutsStatics.HTTP_RESPONSE);
        ServletContext servletContext = (ServletContext) invocation
                .getInvocationContext().get(StrutsStatics.SERVLET_CONTEXT);

        InputStream template = new FileInputStream(servletContext
                .getRealPath(location));
        Map beans = getBeans(invocation);
        String fileName = getFileName();

        ByteArrayOutputStream out = new ByteArrayOutputStream();

        Workbook workbook = new XLSTransformer().transformXLS(template, beans);
        workbook.write(out);

        byte[] result = out.toByteArray();

        fileName = fileName == null ? invocation.getProxy().getActionName()
                : conditionalParse(fileName, invocation) + ".xls";

        response.setContentType("application/vnd.ms-excel");
        response.setContentLength(result.length);
        response.setHeader("Content-Disposition", "attachment; filename=\""
                + fileName + "\"");
        response.getOutputStream().write(result);
    }

    @SuppressWarnings("unchecked")
    private Map getBeans(ActionInvocation invocation) {
        Object rootObj = root == null ? invocation.getAction() : invocation
                .getStack().findValue(root);
        return new BeanMap(rootObj);
    }

    private String getFileName() {
        return new StringBuffer()
                .append(fileName == null ? "report" : fileName).append(".xls")
                .toString();
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public void setRoot(String root) {
        this.root = root;
    }
}
//#################end ##################//

以下为第二种方法
//#################start##################//
/**
     * export Excel_2
     * 
     * @author Lgscofield
     */
    @SuppressWarnings("unchecked")
    public void exportExcel() {
        try {
            listBuildLandOwnership = (List<BuildLandOwnershipVO>) ServletActionContext.getRequest()
                    .getSession().getAttribute("listBuildLandOwnership");
            BuildLandOwnershipVO blVO = (BuildLandOwnershipVO) ServletActionContext.getRequest()
                    .getSession().getAttribute("blVO");
            List<BuildLandOwnershipVO> header = new ArrayList<BuildLandOwnershipVO>();
            if (blVO != null) {
                blVO.setHmj(blVO.getHmj() + "");
                blVO.setGmj(blVO.getGmj() + "");
                blVO.setHmj(blVO.getHmj() + "");
                blVO.setNydHj(blVO.getNydHj() + "");
                blVO.setNydHjg(blVO.getNydHjg() + "");
                blVO.setNydHjj(blVO.getNydHjj() + "");
                blVO.setMj01(blVO.getMj01() + "");
                blVO.setMj01g(blVO.getMj01g() + "");
                blVO.setMj01j(blVO.getMj01j() + "");

                blVO.setMj02(blVO.getMj02() + "");
                blVO.setMj02g(blVO.getMj02g() + "");
                blVO.setMj02j(blVO.getMj02j() + "");

                blVO.setMj03(blVO.getMj03() + "");
                blVO.setMj03g(blVO.getMj03g() + "");
                blVO.setMj03j(blVO.getMj03j() + "");

                blVO.setMj04(blVO.getMj04() + "");
                blVO.setMj04g(blVO.getMj04g() + "");
                blVO.setMj04j(blVO.getMj04j() + "");

                blVO.setQtNyd(blVO.getQtNyd() + "");
                blVO.setQtNydg(blVO.getQtNydg() + "");
                blVO.setQtNydj(blVO.getQtNydj() + "");

                blVO.setJmjgkyd(blVO.getJmjgkyd() + "");
                blVO.setJmjgkydg(blVO.getJmjgkydg() + "");
                blVO.setJmjgkydj(blVO.getJmjgkydj() + "");

                blVO.setJtyd(blVO.getJtyd() + "");
                blVO.setJtydg(blVO.getJtydg() + "");
                blVO.setJtydj(blVO.getJtydj() + "");

                blVO.setSlyd(blVO.getSlyd() + "");
                blVO.setSlydg(blVO.getSlydg() + "");
                blVO.setSlydj(blVO.getSlydj() + "");

                blVO.setJsdHj(blVO.getJsdHj() + "");
                blVO.setJsdHjg(blVO.getJsdHjg() + "");
                blVO.setJsdHjj(blVO.getJsdHjj() + "");

                blVO.setWlytd(blVO.getWlytd() + "");
                blVO.setWlytdg(blVO.getWlytdg() + "");
                blVO.setWlytdj(blVO.getWlytdj() + "");

                blVO.setQtWlytd(blVO.getQtWlytd() + "");
                blVO.setQtWlytdg(blVO.getQtWlytdg() + "");
                blVO.setQtWlytdj(blVO.getQtWlytdj() + "");

                blVO.setWlyHj(blVO.getWlyHj() + "");
                blVO.setWlyHjg(blVO.getWlyHjg() + "");
                blVO.setWlyHjj(blVO.getWlyHjj() + "");
                header.add(blVO);
            }

            if (listBuildLandOwnership != null) {
                String fileName = null;
                try {
                    fileName = URLEncoder.encode("土地利用现状权属审核(分析)表.xls", "utf-8");
                } catch (UnsupportedEncodingException e1) {
                    e1.printStackTrace();
                }

                Map beans = new HashMap();
                beans.put("header", header);
                beans.put("listBuildLandOwnership", listBuildLandOwnership);
                ServletContext sc = (ServletContext) ActionContext.getContext().get(
                        ServletActionContext.SERVLET_CONTEXT);
                String location = sc.getRealPath("/export/BloAnalysis.xls");
                ServletActionContext.getResponse()
                        .setContentType("text/vnd.ms-excel;charset=UTF-8");
                ServletActionContext.getResponse().setHeader("Content-Disposition",
                        "attachment; filename=\"" + fileName + "\"");

                InputStream template = new FileInputStream(location);
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                Workbook workbook = new XLSTransformer().transformXLS(template, beans);
                workbook.write(out);
                byte[] result = out.toByteArray();
                ServletActionContext.getResponse().setContentLength(result.length);
                ServletActionContext.getResponse().getOutputStream().write(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
//##################end####################//

本文转载自:http://lgscofield.iteye.com/blog/1496801

共有 人打赏支持
lgscofield

lgscofield

粉丝 20
博文 140
码字总数 63036
作品 0
南京
架构师
SpringMVC源码(七)-View的多种实现

SpringMVC支持的视图有很多种,JSP的视图为JstlView,同时也支持其他模版:FreeMaker对应的视图为FreeMarkerView,Velocity对应的视图为VelocityView。另外还支持Excel及PDF的视图。 在Dispa...

青离
2017/10/25
0
0
JExcel 的基本操作demo

面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可供使用,一个是...

json_wjw
2016/09/20
121
0
nature/kunter-generator

kunter-generator Git@OSC GitHub Bitbucket Coding 因服务器问题,Maven私库无法提供服务,如需下载kunter-base包请私信我 特别声明:因为采用了12c特有分页语法,本工具Oracle暂时不支持O...

nature
2015/06/03
0
0
Excel4J v2.1.0版本更新,Java 快速操作 Excel 工具

java基于poi实现快速操作Excel的工具[v2.1.0]版本更新: v2.x新特性 Excel读取支持部分类型转换了(如转为Integer,Long,Date(部分)等) v2.0.0之前只能全部内容转为String Excel支持非注解读取E...

Crab2Died
2017/10/28
1K
7
基于 POI 封装 ExcelUtil 精简的 Excel 导入导出

注 本文是使用 org.apache.poi 进行一次简单的封装,适用于大部分 excel 导入导出功能。过程中可能会用到反射,如若有对于性能有极致强迫症的同学,看看就好。 序 由于 poi 本身只是针对于 ...

倚楼听风雨_
2017/05/22
0
22

没有更多内容

加载失败,请刷新页面

加载更多

下一页

【七】组合Action

本章描述了常用定义Action的方法。 自定义action builders 我们在action一章已经看过如何声明一个action——有request parameter、无request parameter、有body parser等等。你可以在 asynch...

Landas
37分钟前
0
0
Spring Boot实战之基础回顾

本文作者: 吴伟祥 本文链接: https://wuweixiang.cn/2018/08/21/Spring-Boot实战之基础回顾/ 版权声明: 本博客所有文章除特别声明外均为原创,采用CC BY-NC-SA 4.0 许可协议。转载请在文章开...

吴伟祥
38分钟前
0
0
OAuth认证开发

提示: 以下测试是基于项目安装成功,初始化数据库(initial_db.ddl, oauth.ddl, initial_data.ddl)后的测试, 也可在页面上点击"client_details"菜单里进行测试 方式1:基于浏览器 (grant_type=...

舒文joven
46分钟前
1
0
第二章-对象及变量的并发访问-第二篇

锁对象的改变 请阅读如下代码 public class MainClass { private String lock = "123"; public void printStringB() { try { synchronized (lock) { ......

简心
50分钟前
0
0
日志中记录代理IP以及真实客户端、apache只记录指定URI的日志

apache 日志中记录代理IP以及真实客户端 默认情况下log日志格式为: LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined 其中%h 是记录访问者的IP,如果在web的前...

李超小牛子
59分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部