欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

利用java反照实现通用的excel报表

更新时间: 2014-01-05 03:07:28 责任编辑: Author_N1

 

利用Java反射实现通用的Excel报表
最近有很多客户报表需要提供客户下载,需要生成一个Excel的格式文件,所以写了
一个通用的Excel报表生成代码供各个地方使用:
	public <T> void createExcelReport(List<T> reports,Map<String,String> headerMap,OutputStream output) throws IOException {
		if(reports == null || reports.isEmpty()) return;
		
		Workbook wb = new HSSFWorkbook();
		HSSFSheet sheet = (HSSFSheet) wb.createSheet("报表");
		HSSFRow row = sheet.createRow(0);
		
		//create header
		Object report = reports.get(0);
		Field[] fields = report.getClass().getDeclaredFields();
		for(int i = 0; i < fields.length; i++){
			String headValue = headerMap.get(fields[i].getName());
			row.createCell(i).setCellValue(headValue);
			sheet.setColumnWidth(i, 20 * 256);
		}
		
		//fill the data
		for(int i = 0; i < reports.size(); i++){
			Object rp = reports.get(i);
			row = sheet.createRow(i+1);
			for(int j = 0; j < fields.length; j++){
				String getMethodName = "get" + StringUtils.capitalize(fields[j].getName());
				Method method = null;
				try {
					method = rp.getClass().getMethod(getMethodName, null);
				}catch(NoSuchMethodException e){//for boolean type isField
					getMethodName = "is" + StringUtils.capitalize(fields[j].getName());
					try {
						method = rp.getClass().getMethod(getMethodName, null);
					} catch (Exception ex){
						throw new RuntimeException("Create Report failed!",ex);
					}
				}
				if(method != null){
					Object value;
					try {
						value = method.invoke(rp);
						value = value == null ? "" : value;
						row.createCell(j).setCellValue(value.toString());
					} catch (Exception e) {
						throw new RuntimeException("Create Report failed!",e);
					}
				}
			}
		}
		wb.write(output);
	}
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:07:28
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/18623/
本文WWW.DOC100.NET DOC100.NET版权所有。