java导出Excel(动态列)

java导出excel的文章网上搜索有许多,一般有两种,poi和jxl方式,但是一般导出的都是列固定的,对应的都是javabean中的一个属性,偶尔有做动态列的,也是伪动态,比如这个bean有20个字段,web端有个页面,显示出所有的20个属性,然后根据你选择了哪些属性导出,最多不能超过这20个属性,所以我说这种是伪动态的。最近遇到了一个导出要求,是全动态的,就是导出列是完全变化的,包括列名称都是动态。

     JSONObject json = JSONTools.toJSONObject(args);
        XmjckzSearchBean search = JSONTools.toBean(json, XmjckzSearchBean.class);
        List list = xmjckzService.queryAll(search);
        if (list == null || list.size() == 0) {
            return;
        }

        try {
            String exportName = "项目进程控制信息";
            if (WebUtils.isIE()) {
                exportName = URLEncoder.encode(exportName, "UTF-8");
            } else {
                exportName = new String(exportName.getBytes("UTF-8"),
                        "ISO-8859-1");
            }
            response.addHeader("Content-Disposition", "attachment;filename=" + exportName + ".xls");
            response.setContentType("application/vnd.ms-excel");
            // 创建可写工作薄
            WritableWorkbook wwb = Workbook.createWorkbook(response.getOutputStream());
            WritableSheet ws = wwb.createSheet("项目进程控制信息", 0);
            WritableFont headerFont = new WritableFont(WritableFont.createFont("宋体"), 10, WritableFont.BOLD);
            WritableCellFormat cellFormat = new WritableCellFormat(headerFont);
            cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
            cellFormat.setAlignment(Alignment.CENTRE);
            ws.setColumnView(0, 20);
            List zdList = nqxlkwhService.getAllByLxmc("YW_DLZC");
            Label labelCF = null;
            if(Utils.isNotEmpty(zdList)) {
                //创建标题
                labelCF = new Label(0, 0, "序号");
                labelCF.setCellFormat(cellFormat);
                ws.addCell(labelCF);
                ws.setColumnView(0, 15);

                labelCF = new Label(1, 0, "公司名称");
                labelCF.setCellFormat(cellFormat);
                ws.addCell(labelCF);
                ws.setColumnView(1, 15);

                int i = 2;
                for(Nqsjzd zd : zdList) {
                    //  每一个zd就是一列,列标题就是zd的value
                    labelCF = new Label(i, 0, zd.getValue());
                    labelCF.setCellFormat(cellFormat);
                    ws.addCell(labelCF);
                    ws.setColumnView(i++, 15);
                }
            }

            //给每个列根据查询出的数据进行填充数据
            for (int i = 0; i < list.size(); i++) {
                Xmjckz entity = list.get(i);

                labelCF = new Label(0, i + 1, i + 1 + "");
                cellFormat = new WritableCellFormat();
                cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
                labelCF.setCellFormat(cellFormat);
                ws.addCell(labelCF);
                labelCF = new Label(1, i + 1, entity.getGsmc());
                labelCF.setCellFormat(cellFormat);
                ws.addCell(labelCF);

                JSONObject content = JSONTools.toJSONObject(entity.getContent());
                int j = 2;
                for(Nqsjzd zd : zdList) {
                    String rqS = (String) content.get(zd.getTid().toString());
                    labelCF = new Label(j++, i + 1, rqS);
                    labelCF.setCellFormat(cellFormat);
                    ws.addCell(labelCF);
                }
            }
            wwb.write();
            wwb.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

        return ;

说明一下: List list,这个list是根据条件查询出来需要到处多少条数据。 List zdList,这个list里面保存的是有多少列,每一列就是一个Nqsjzd。

content字段保存的一个json字符串,key是zd的主键,值是日期。看下面图可能更直观点。

代理注册的进程是动态的,可以维护的,然后进行进程设定日期。

2014-03-05_214107
2014-03-05_214212
2014-03-05_214234
2014-03-05_220646

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇