`

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的标签

<?xml version="1.0"?>

%@ 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");
%><?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <Created>1996-10-14T23:33:28Z</Created>
  <LastSaved>2006-10-19T23:03:49Z</LastSaved>
  <Version>11.5606</Version>
 </DocumentProperties>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>9300</WindowHeight>
  <WindowWidth>15135</WindowWidth>
  <WindowTopX>120</WindowTopX>
  <WindowTopY>120</WindowTopY>
  <AcceptLabelsInFormulas/>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font x:Family="Swiss"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>

~等等

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

 

 <Table ss:ExpandedColumnCount="13" ss:ExpandedRowCount="<s:property value="#request.list.size+1"/>" x:FullColumns="1"
   x:FullRows="1">
   <Column ss:AutoFitWidth="0" ss:Width="80"/>
   <Column ss:AutoFitWidth="0" ss:Width="80"/>
   <Column ss:AutoFitWidth="0" ss:Width="60"/>
    <Column ss:AutoFitWidth="0" ss:Width="60"/>
   <Column ss:AutoFitWidth="0" ss:Width="60"/>
   <Column ss:AutoFitWidth="0" ss:Width="60"/>
   <Column ss:AutoFitWidth="0" ss:Width="60"/>
   <Column ss:AutoFitWidth="0" ss:Width="60"/>
   <Column ss:AutoFitWidth="0" ss:Width="60"/>
   <Column ss:AutoFitWidth="0" ss:Width="60"/>
   <Column ss:AutoFitWidth="0" ss:Width="60"/>
   <Column ss:AutoFitWidth="0" ss:Width="60"/>
   <Column ss:AutoFitWidth="0" ss:Width="100"/>
   <Row>
    <Cell ss:StyleID="s25"><Data ss:Type="String">主板名称</Data></Cell>
    <Cell ss:StyleID="s25"><Data ss:Type="String">项目名称</Data></Cell>
    <Cell ss:StyleID="s25"><Data ss:Type="String">产品线</Data></Cell>
    <Cell ss:StyleID="s25"><Data ss:Type="String">产品类型</Data></Cell>
    <Cell ss:StyleID="s25"><Data ss:Type="String">项目经理</Data></Cell>
    <Cell ss:StyleID="s25"><Data ss:Type="String">项目类别</Data></Cell>
    <Cell ss:StyleID="s25"><Data ss:Type="String">项目状态</Data></Cell>
    <Cell ss:StyleID="s25"><Data ss:Type="String">重要程度</Data></Cell>
    <Cell ss:StyleID="s25"><Data ss:Type="String">启动时间</Data></Cell>
    <Cell ss:StyleID="s25"><Data ss:Type="String">计划完成</Data></Cell>
    <Cell ss:StyleID="s25"><Data ss:Type="String">实际完成</Data></Cell>
    <Cell ss:StyleID="s25"><Data ss:Type="String">创建者</Data></Cell>
    <Cell ss:StyleID="s25"><Data ss:Type="String">创建时间</Data></Cell>
   </Row>
   	<s:iterator id="list" status="index" value="#request.list">	
   <Row>
    <Cell ss:StyleID="s24"><Data ss:Type="String"><s:property value="mainboard"/></Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String"><s:property value="name"/></Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String"><s:property value="productLine.name"/></Data></Cell>
     <Cell ss:StyleID="s24"><Data ss:Type="String"><s:property value="productCategory.name"/></Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String"><s:property value="manager.realname"/></Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String"><s:property value="projectCategory.name"/></Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String"><s:property value="projectStatus.name"/></Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String"><s:property value="projectLevel.name"/></Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String"><s:date name="startTime" id="date1" format="yyyy-MM-dd"/><s:if test="#attr.date1=='1900-01-01'">待定</s:if><s:else><s:property value="%{#attr.date1}"/></s:else></Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String"><s:date name="finishTime" id="date1" format="yyyy-MM-dd"/><s:if test="#attr.date1=='1900-01-01'">待定</s:if><s:else><s:property value="%{#attr.date1}"/></s:else></Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String"><s:date name="actualFinishTime" id="date1" format="yyyy-MM-dd"/><s:if test="#attr.date1=='1900-01-01'">待定</s:if><s:else><s:property value="%{#attr.date1}"/></s:else></Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String"><s:property value="creator.realname"/></Data></Cell>
    <Cell ss:StyleID="s24"><Data ss:Type="String"><s:date name="addTime" id="date1" format="yyyy-MM-dd HH:mm:ss"/><s:property value="%{#attr.date1}"/></Data></Cell>
   </Row>
	</s:iterator>
 

 

 

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" %>
<!-- 以上这行设定本网页为excel格式的网页 -->
<%	
	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档 
%>
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">

<head>
 <meta charset="utf-8">
<!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name></x:Name><x:WorksheetOptions><x:Selected/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->
 <style type="text/css">
 	.tb_head {
 		background-color: #339966;
 	}
 </style>
<title>Excel档案呈现方式</title>
</head>
<body>
  <table border="1" width="100%">
  	<thead>
  		<tr>
  			<th class="tb_head" width="60" rowspan="2">名称</th>
  			<th class="tb_head" width="60" rowspan="2">型号</th>
  			<th class="tb_head" width="60" rowspan="2">经理</th>
  			<th class="tb_head" width="60" rowspan="2"">状态</th>
  			<th class="tb_head" width="60" rowspan="2">平台</th>
  			<th class="tb_head" width="70" rowspan="2">描述</th>
  			<th class="tb_head" width="112.5" rowspan="2">时间点</th>
  			<th class="tb_head" width="417.75" bgcolor="#ffff00">项目进展</th>
  		</tr>
  		<tr>
  			<th>2月第5周</th>
  		</tr>
  	</thead>
  	<tbody>
  		<s:iterator value="#request.list" id="list" status="status">
	  		<tr>
	  			<td><s:property  value="project.name==''|project.name==null?project.tmpName:project.name"/></td>
	  			<td>${project.foreignType }</td>
	  			<td><s:property value="project.managerId!=0?project.manager.realname:''"/></td>
	  			<td><s:property value="project.projectStatusId!=0?project.projectStatus.name:''"/></td>
	  			<td><s:property value="project.hardwarePlatformId!=0?project.hardwarePlatform.name:''"/></td>
	  			<td>产品描述</td>
	  			<td>【生成定型】1212121</td>
	  			<td>${content}</td>
	  		</tr>
  		</s:iterator>
  	</tbody>
  </table>
</body>
</html>

 注意一点:就是我的content是使用富文本的,所以他有很多<div>标签,这个导致生成的excel文档中content内容不再同一个单元格里面。所以,我们需要在保存富文本的时候,把<div><br>可以导致换行的string给替换掉

如:content = content.replace("</div>", "<br style='mso-data-placement:same-cell;' />");
当表格中出现rowspan字样要小心了,它会出现空行,这时候需要在span那个tr后面补全td,并且把下一行的tr给去掉。tr从第三行再加上。

【重要】:两个边框问题

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

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

一个是:

 

<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"

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

 

另一个是:

<!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name></x:Name><x:WorksheetOptions><x:Selected/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->

 

参考资料:

http://poi.apache.org/

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

分享到:
评论

相关推荐

    java绝对生成excel报表

    在Java编程环境中,生成Excel报表是一项常见的任务,尤其在数据处理和数据分析领域。"java绝对生成excel报表"这个标题暗示了我们可以通过Java实现对Excel文件的创建和操作,确保能够生成精确的表格形式的数据报告。...

    java报表导出Excel的一个简单的类

    java报表导出Excel的一个简单的类就几行代码。

    JAVA导出Excel报表之jxl插件及实例源码

    jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。其中功能相对POI比较弱一点。但jExcelAPI对中文支持非常好,API是纯Java的, 并不依赖Windows...

    java导出Excel 时候 相同行合并

    java导出Excel 时候 相同行合并(可合并多列); 已测试通过;

    POI报表导出excel

    在这个“POI报表导出excel”的案例中,我们将深入探讨如何使用POI 3.6版本来实现报表的导出,包括设置Excel样式、合并单元格以及处理多表头的合并。 首先,我们需要了解Apache POI的核心组件:HSSFWorkbook(用于...

    java导出excel POI jar包

    Java导出Excel是Java开发中常见的需求,尤其是在数据处理和报表生成方面。Apache POI库是Java领域中广泛使用的工具,它允许开发者读写Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本篇文章将深入讲解...

    Java利用poi导出excel表格

    通过以上步骤,我们可以实现从数据库中获取数据并利用Apache POI在Java中生成Excel报表,提供给用户下载或进一步分析。这个过程不仅适用于简单的数据导出,也可以扩展到复杂的报表生成,如合并单元格、插入图表、...

    java导出excel复合表头简单实例

    本资源提供的"java导出excel复合表头简单实例"是针对Java开发者的一个实用教程,特别是对于那些刚开始接触Java Excel导出功能的新手。这个实例将帮助你理解如何在Excel中创建并设置复杂的表头结构,使得数据的呈现...

    easyPoi模板导出Excel报表(xls 和xlsx 都支持)

    《使用EasyPoi模板导出Excel报表:xls与xlsx格式全面解析》 在现代企业管理和数据分析中,Excel报表起着至关重要的作用。它不仅能够直观地展示数据,还能进行复杂的数据处理和分析。然而,手动创建和维护大量报表是...

    java导出excel复杂表头

    本示例涉及的主题是“java导出excel复杂表头”,这意味着我们要处理的不是简单的单级表头,而是包含多级或者多层次结构的表头。在描述中提到这是一个可以直接运行的Java工程,但需要进一步改造为Web下载服务。 首先...

    java 导出excel,带图片的Excel导出

    在Java编程中,导出Excel是一项常见的任务,特别是在数据分析、报表生成或数据交换等领域。而带图片的Excel导出则增加了复杂性,因为涉及到二进制数据的处理和Excel特定格式的支持。以下是一些关于如何在Java中实现...

    java 开发excel报表

    在Java开发中,生成Excel报表是一项常见的任务,特别是在数据分析、数据导出或提供用户友好的数据展示场景下。本文将详细探讨如何使用Java技术来创建Excel报表,主要涉及两个核心部分:数据库连接和使用Apache POI库...

    java导出到excel的工具类

    在Java编程中,导出数据到Excel是一种常见的需求,特别是在数据分析、报表生成或者数据交换的场景下。Apache POI是一个强大的库,专为处理Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。本篇文章将...

    java导出excel(写入到excel后再下载)示例

    Java导出Excel是Java开发中常见的需求,尤其在数据分析、报表生成或数据交换场景中。本示例资源提供了一个RAR压缩包,包含了实现这一功能的源代码,主要讲解了两个核心部分:一是如何将数据写入Excel文件并保存在...

    java导出excel的jar包及例子代码

    总之,Java导出Excel涉及到的主要知识点包括:Apache POI库的使用,Workbook、Sheet、Row和Cell对象的创建和操作,以及数据写入和文件输出。希望这个示例能帮助你理解并开始在自己的项目中实现Excel导出功能。

    java导出excel的相关jar

    压缩包中的文件"java导出excel"很可能包含了使用这两种库的示例代码或教程资源,你可以通过解压并学习这些文件来深入理解如何在Java中实现数据到Excel的导出。记得在实际使用时,要根据项目需求选择合适的技术,并...

    java 导出excel(方法二)

    在Java编程中,导出Excel数据是常见的任务,特别是在数据处理和报表生成的场景下。本教程将聚焦于使用jxl库来实现这一功能。jxl是一个流行且强大的Java库,能够读写Microsoft Excel文件。这里我们将介绍如何利用jxl...

    java操作Excel\Web应用导出Excel报表的简单实现 .htm

    java操作Excel\Web应用导出Excel报表的简单实现 .htm

    java导出excel pdf 报表

    在实际项目中,根据具体需求选择合适的库和方法,合理设计数据结构和逻辑,可以有效地实现Java导出Excel和PDF报表的功能。此外,持续关注库的更新和新特性,以便充分利用最新的技术来提升开发效率和报表质量。

    java操作数据库 导出excel

    Java操作数据库并导出Excel是一项常见的任务,尤其在数据分析、报表生成或数据迁移等领域。这里主要涉及两个核心技术:Java数据库连接(JDBC)用于与数据库交互,以及Apache POI库用于处理Excel文件。 首先,Java...

Global site tag (gtag.js) - Google Analytics