文档章节

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

lgscofield
 lgscofield
发布于 2015/06/26 13:58
字数 512
阅读 138
收藏 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####################//
下一篇: 勉励自己
lgscofield

lgscofield

粉丝 24
博文 141
码字总数 63275
作品 0
南京
架构师
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.6K
8
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
6.2K
18
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
708
1
SQLServer实现split分割字符串到列

网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题。 先贴上某大牛写的s...

cwalet
2014/05/21
9.7K
0

没有更多内容

加载失败,请刷新页面

加载更多

Subversion存储库中“分支”,“标记”和“主干”的含义是什么?

问题: I've seen these words a lot around Subversion (and I guess general repository) discussions. 我已经在Subversion(我猜通用存储库)讨论中看到了很多这样的话。 I have been us......

富含淀粉
今天
5
0
《Java8实战》笔记(03):Lambda表达式

本文源码 Lambda 管中窥豹 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。 Lambda表达...

巨輪
今天
7
0
从其他文件夹导入文件 - Importing files from different folder

问题: I have the following folder structure. 我有以下文件夹结构。 application/app/folder/file.py and I want to import some functions from file.py in another Python file which r......

javail
今天
22
0
大数据研发学习之路--Hadoop集群搭建

阅读编译文档 准备一个hadoop源码包,我选择的hadoop版本是:hadoop-2.7.7-src.tar.gz,在hadoop-2.7.7的源码 包的根目录下有一个文档叫做BUILDING.txt,这其中说明了编译hadoop所需要的一些...

DSJ-shitou
今天
8
0
OSChina 周五乱弹 —— 特么是别的公司派来的特洛伊木马吧?

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 小小编辑推荐:《我会守在这里》- 毛不易 《我会守在这里》- 毛不易 手机党少年们想听歌,请使劲儿戳(这里) @FalconChen :股市连跪了五天,...

小小编辑
今天
77
2

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部