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<Xmjckz> 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<Nqsjzd> 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
小恐龙
花!
上一篇
下一篇