近一段时间要出一些报表,其中用户提出了一个关键的问题,就是要把页面上的数据另存为EXCEL,现在说说我们的做法:
第一种方法:直接在另存的时候,设置contenttype为EXCEL,即把页面保存为EXCEL的名字
response.setHeader("Content-type","application/xls");
response.setHeader("Content-Disposition", "attachment;filename=booking.xls");
response.setHeader("Content-Type", "application/vnd.ms-excel; charset=UTF-8");
request.setCharacterEncoding("utf-8");
下面是基于HTML的页面内容,如一个基于TABLE的表格数据,这样完全可以满足需要,但注意的是,不能把一个页面内的图片、脚本和样式等带进来,因此如果TABLE里面有背景之类的东东要拿掉,是一个干净整齐的数据表格,如果有颜色的话,可以加粗,这些东东用EXCEL打开没有问题。
此方法可以简单的解决我们把一个页面数据转存为EXCEL,也是较简单的方法,但是不能够存为多个SHEET
问题就是用户需要批量导出数据,按月分SHEET列,于是想到了下面的方法。
第二种方法:按照XML格式保存数据(我们可以用EXCEL打开个表格文件,另存为XML格式后可以看到这样的格式)
我们按照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="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author>User</Author>
<LastAuthor>User</LastAuthor>
<Created>2009-03-20T02:15:12Z</Created>
<Company>Microsoft</Company>
<Version>12.00</Version>
</DocumentProperties>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>7815</WindowHeight>
<WindowWidth>14880</WindowWidth>
<WindowTopX>240</WindowTopX>
<WindowTopY>75</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Worksheet ss:Name="Sheet1"><!--Sheet1-->
<Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="5" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5"><!--一个表格-->
<Row ss:AutoFitHeight="0">
<Cell><Data ss:Type="Number"><!--数据类型必须要加上-->1111</Data></Cell>
<Cell ss:MergeDown="3" ><!--跨2列-->><Data ss:Type="Number">2211</Data></Cell>
<Cell><Data ss:Type="Number">333</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0">
<Cell><Data ss:Type="Number">111</Data></Cell>
<Cell ss:Index="3"><!--注意必须要加上INDEX,指明此列是的索引起始位置是几,因为上面一行跨了行,因此他是跨完后的列,如同--><Data ss:Type="Number">33</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0">
<Cell><Data ss:Type="Number">11</Data></Cell>
<Cell ss:Index="3"><Data ss:Type="Number">33</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0">
<Cell><Data ss:Type="Number">111</Data></Cell>
<Cell ss:Index="3" ss:MergeDown="1" ><Data ss:Type="Number">33</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0">
<Cell><Data ss:Type="Number">11</Data></Cell>
<Cell><Data ss:Type="Number">333</Data></Cell>
</Row>
</Table>
</Worksheet>
</Workbook>
上述代码另存为一个xml或是xls文件,通过EXCEL打开,就可以看到直观的效果,其中的worksheet item就是我们所说的SHEET,table是我们的表格数据,只要按照此种格式生成一个文件,就OK了,这种方法比较简单可行,只是在跨行和跨列的计算上不同于HTML的跨行跨列,一定要注意,并且大小写敏感,但是存起来比较方法,能够满足基于页面数据的按照SHEET多次导出,做了个简单的页面表格导成XML TABLE的例子,可以看看效果
第三种方法:即用Java Excel API进行数据的存储,此种方法网上介绍的较多,就不做详细的解释了,我本人还是对第二种方法感兴趣
上述方法供大家参考,不妥之处多请指正
分享到:
相关推荐
VBA一键sheet页另存为Excel,批量拆分Excel sheet页为单个文档。
指定excel的sheet另存为excel输出到指定的文件夹。 可以快速按固定的模版格式产生独立数据的报表。
excel中的多个sheet自动另存为以sheet名称命名的excel文件,用delphi开发,含源码。
excel中的多个sheet自动另存为以sheet名称命名的excel文件,用delphi开发,含源码。
java读取Excel文件中多个sheet,生成xml格式的文件
纯JavaScript实现json格式数据导出到Excel文件,支持多个Sheet页导出
pandas可以非常方便的写数据到excel,那么如何写多个dataframe到不同的sheet呢? 使用pandas.ExcelWriter import pandas as pd writer = pd.ExcelFile('your_path.xlsx') df1 = pd.DataFrame() df2 = pd....
excel 数据导入导出,支持多Sheet页
使用poi方式导出excel,支持将多个工作簿合成一个Excel进行导出
Delphi关于导出Excel多分页Sheet的方法,找了很久资料没有找到,自己做了一个。希望以后能用到。
excel根据某个sheet中的第一列关键字不通拆分为多个sheet(第一列已排序的情况)。excel中把多个sheet合并为一个sheet的脚本
支持将多个DEV GridControl的GridView导出到同一个Excel文件中的Sheet中,每个GridView保存到不同的Sheet中,含源码,真实可用。
matlab将多个excel读取并存到一个excel的不同sheet中
asp.net实现数据导入导出到Excel中多Sheet的情况
使用C#实现了将多个datatable中的内容导出到 一个excel文件的不同的sheet页,每个sheet页对应一个datatable。代码中的datatable是程序中添加的内容,从数据库中导出数据到excel的话只需要将数据表内容写入datatable...
每个sheet允许导出50000条记录,可以配置,如果sheet中的记录数>50000,则创建一个新sheet并从第一行开始导出记录
Excel按照A1列关键字分离数据为多个sheet,并且,提供分离sheet为多个excel文件的功能
使用poi 分多个 sheet 导出excel,希望对您有帮助。
此文件为多个sheet的excel导入,可以根据文件后缀,自动适应上传文件的版本,返回为list或者map,支持2003 版本以及2007版本的excel