JAVA导出excel报表

 

1、使用POI

A)下载地址http://poi.apache.org/download.html

B)使用方式

       1、准备一个简单的excel文档(静态的数据都先填写上去),放入到项目src路径下中

       2、在action中读取excel文档,并创建一个excel文档对象

              String filename = PropertyUtil.getPropertyValue(“配置文件路径”)+”文件名”;

              HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(filename));

       3、获取每一个分页的对象文档中默认有三个sheet,默认第一个下角标为0                       HSSFSheet sheet0 = wb.getSheetAt(0);//获取第一个sheet12表示后面两个

       4、动态加入数据

              1、创建一个行

                     Row row = sheet0.createRow(“第几行”);

              2、在这一行创建 一个单元格

                     Cell cell = row.createCell(第几个);

              3、往里头填数据

                     cell.setCellValue(“我的数据”);

       5、特效

              1、单元格合并

                     Sheet0.addMergedRegion(new CellRangeAddress(四个参数分别表示行,列坐标));//合并这里面的范围到一个单元格中

              2、单元格样式

                     Cell.setCellStyle(一个样式对象CellStyle类型);

                     CellStyle style = wb.createCellStyle();

                     Style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);

                     Style.setBorderTop(CellStyle.BORDER_THIN);等等

//还有很多可以查看POI文档

       C)好坏

              1、好处:控制力强,是我们熟悉的java代码,不过需要熟悉第三方API

              2、缺点:代码量比较大

 

2、使用excel模板方式

1、制作你想要的excel文档,列宽度、字体等设置好。(作为模板使用)

2、将excel另存为:->其他格式->XML 电子表格2003 (*.xml) 文件名记:1.xls

3、使用文本编辑器打开,1.xls。你可以发现类似于xml的标签

%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><%
	String date=new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date());
	
	
	response.setContentType("application/vnd.ms-excel");
	
	String filename="项目信息表_"+date;
	
	String userAgent=request.getHeader("User-Agent");
	
	if(userAgent.indexOf("MSIE")>-1){
		filename=java.net.URLEncoder.encode(filename,"UTF-8");
	}else{
		filename=new String(filename.getBytes("UTF-8"),"ISO8859-1");
	}
	response.setHeader("Content-disposition","attachment; filename="+filename+".xls");
%>

 
  1996-10-14T23:33:28Z
  2006-10-19T23:03:49Z
  11.5606
 
 
  9300
  15135
  120
  120
  
  False
  False
 
 
  

~等等

  我们需要在动态的row哪里添加我们的数据

 

 " x:FullColumns="1"
   x:FullRows="1">
   
   
   
    
   
   
   
   
   
   
   
   
   
   
    主板名称
    项目名称
    产品线
    产品类型
    项目经理
    项目类别
    项目状态
    重要程度
    启动时间
    计划完成
    实际完成
    创建者
    创建时间
   
   		
   
    
    
    
     
    
    
    
    
    待定
    待定
    待定
    
    
   
	   
  

 

 

C)、好坏

       1、坏处:xml标签学习代价很高,不易上手,这样的jsp页面不容易看懂。比如动态合并单元格就很麻烦,你得需要XML标签知识才能更改。

       2、好处:不用java代码,只要在填充数据的地方使用itertor来遍历你的数据即可,所以对于简单的数据量,样式很少的可以使用这个

 

 

3、使用html基本table方式

 

<%@ page contentType="application/vnd.ms-excel; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="/struts-tags" prefix="s" %>

<%	
	String fileName = new String("如果要显示中文文件名.xls".getBytes("UTF-8"), "iso8859-1");
	response.setCharacterEncoding("utf-8");
   	response.setHeader("Content-disposition","inline; filename=" + fileName);
  

   //response.setHeader("Content-disposition","inline; filename=test1.xls");
   //以上这行设定传送到前端浏览器时的档名为test1.xls
   //就是靠这一行,让前端浏览器以为接收到一个excel档 
%>



 

 
Excel档案呈现方式


  
名称 型号 经理 状态 平台 描述 时间点 项目进展
2月第5周
${project.foreignType } 产品描述 【生成定型】1212121 ${content}

 注意一点:就是我的content是使用富文本的,所以他有很多

标签,这个导致生成的excel文档中content内容不再同一个单元格里面。所以,我们需要在保存富文本的时候,把

可以导致换行的string给替换掉

如:content = content.replace("

", "
");
当表格中出现rowspan字样要小心了,它会出现空行,这时候需要在span那个tr后面补全td,并且把下一行的tr给去掉。tr从第三行再加上。

【重要】:两个边框问题

1、设置表格内的边框: border="1"

2、表格之外的边框:见代码红色部分;代码红色显示不出来。。

一个是:

 

xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">

 

另一个是:

 

参考资料:

http://poi.apache.org/

http://www.cnblogs.com/cannel/archive/2011/06/30/2094189.html 

你可能感兴趣的:(J2EE,plugin,java,前端)