导出 excel 有时也挺头痛的
poi,jxl 未免太过复杂
js 方式有浏览器兼容问题,而且不能把页面的样式一般导出
其实有一种简单的方式可以导出格式良好的 excel
我之前就用这种方式做简单格式的 excel 导出的
今天有个技术群里有人问导出 excel 方法
于是做了个例子
第一步:打开 excel,设置一个 excel 模板, 然后另存为 XML 表格
第二步:用文本编辑器打开刚刚保存的模板文件,把代码复制粘贴到JSP页面,如 export.jsp
第三步:如展示页面一样写后台 Action, Action 跳转到对应的JSP页面(export.jsp)
JSP 页面代码如下
<%@ page language="java" pageEncoding="UTF-8"%>
<%@page contentType="application/vnd.ms-excel; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%response.addHeader("Content-Disposition: attachment", "filename=test.xls");%>
<!-- 以下为 excel 里定制的模板代码,打开 excel 设置格式,然后另存为 XML 表格 -->
<?xml version="1.0"?>
<?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="<A href="http://www.w3.org/TR/REC-html40">http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author>Ivan Self</Author>
<LastAuthor>Ivan Self</LastAuthor>
<Created>2010-07-21T11:40:53Z</Created>
<LastSaved>2010-07-21T12:01:49Z</LastSaved>
<Version>11.5606</Version>
</DocumentProperties>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>8895</WindowHeight>
<WindowWidth>11715</WindowWidth>
<WindowTopX>240</WindowTopX>
<WindowTopY>15</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Center"/>
<Borders/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="s21">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="14" ss:Bold="1"/>
<Interior ss:Color="#00CCFF" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s22">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
<Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="3013" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
<Row ss:Height="18.75">
<!-- 标题 相当于后台传来的标题数组 -->
<c:forEach begin="1" end="3" var="h">
<Cell ss:StyleID="s21"><Data ss:Type="String">标题_${h}</Data></Cell>
</c:forEach>
</Row>
<!-- 结果集 相当于后台传来的结果集 -->
<c:forEach begin="1" end="3" var="rs">
<Row>
<Cell ss:StyleID="s22"><Data ss:Type="String">a_${rs}</Data></Cell>
<Cell ss:StyleID="s22"><Data ss:Type="String">b_${rs}</Data></Cell>
<Cell ss:StyleID="s22"><Data ss:Type="String">c_${rs}</Data></Cell>
</Row>
</c:forEach>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>2984</ActiveRow>
<ActiveCol>3</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
这样就如同JSP展示页面一样做导出了
把下面的代码也放到 action 中
<%response.addHeader("Content-Disposition: attachment", "filename=test.xls");%>
这样就可以多个导出需求(多少 action/方法)都对应一个JSP页面
每个需求设置不同的文件名,传不同的标题数组以及结果集就可以了
注意一点:定义模板时的行一定好大于实际导出的行,要不导出的文件无法打开
分享到:
相关推荐
一种很简单的将JSP页面的table导出excel的方法
delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):boolean; const xlNormal=-4143; var y : integer; tsList : TStringList; s,filename :string; aSheet :...
可以运行的POI导出Excel文件实例,里面有两种方法,一个是Servlet,一个是main
自定义的一个excel文件导入导出类,支持Excel2003到2010的格式。里面也有简单的配置文件的创建。
但是这两种导出方法难以保持表头等单元格合并,表格颜色,表格字体等样式. 利用将网页导出到excel中的方式,可以解决以上问题. <br>/// <summary><br> /// 导出excel /// </summary><br> /// ...
plsql导出数据到excel常用的三种方法,(1)直接导出;(2)转换导出方式;(3)导出后转换格式;
本人写的一个简单的数据库导出Excel小工具: 1.本小程序为数据库Excel导出工具,理论上支持所有的数据库(暂时只支持三种数据库) 2.lib下面为连接数据库和导出Excel的jar包,目前只有sqlserver,oracle和mysql的jar包...
纯js导出EXCEL,生成的伪xls文件 支持中文 1,我用谷歌浏览器下载没有问题,可能会碰见下载文件没有后缀名的问题,另存就可以 2,还有另一种解决方案,就是修改base64编码,使其支持中文,下篇文件会列出
导出 EXCEL 的一种方式,里面有方法的功能说明
介绍ASPxGridView的四种导出EXCEL方法,总有一种适合你。
C#导出数据到EXCEL表格是个老生常谈的问题了,写这篇文章主要是给和我一样的新手朋友提供两种导出EXCEL的方法并探讨一下导出的效率问题,本文中的代码直接就可用,其中部分代码参考其他的代码并做了修改,抛砖引玉,...
花了半天时间网上整理出来的两种从Access 导出数据到Excel的方法。一种是在服务器端,一种是客户端。挺好用的 !
压缩包里面包含了三种批量数据导出Excel方法, 每个文件夹的命名就是一种方法
OLE导出: sap中abap 导出excel的方法很多,ole是其中一种,但其导出速度比较慢,一般只应用于对excel格式有特别要求的场所......
两种方法将easyui datagrid 中的数据导出到Excel中,均以验证可以正常使用
博文《使用EasyPOI导出Excel模板数据(含图片)》所含源码,应众多网友要求放出来。包含测试类、导出工具类、图像工具类、Excel模板
需要控件两个 fastreport 6版本 NATIVEEXCEL 控件一个 fastreport导出PDF fastreport导出Excel