两种方法,这是一种,主要是通过把前台数据传到后台,通过后台POI API来导出,通用方式!
利用Ext grid显示前台数据,然后把前台数据进行Excel表导出,再导出报表的时候要求:
1、要把grid数据显示的表头信息导入Excel表
2、在导出Excle表的时候,可以进行选择,是进行勾选的导出,还是批量导出(勾选导出,根据勾选的记录导出,批量导出,全部导出),
3、在进行批量导出的时候,是分页显示还是显示成一页(sheet标签,在Excel表中用)
首先,准备数据,创建grid并把数据填充进去,这里我就不再多说,不是本文的重点:
但需要说明的是,在进行store准备数据的时候,我们要保证命名的规范性,为接下来的利用java反射取得数据打下基础,
接下来根据要求,我们设计一个按钮,当点击按钮的时候,弹出一个窗口,为我们提供选择
还有就是要得到grid数据的表头信息
关键代码:strBuffer为我们自己重写的StringBuffer类
for(var j=2; j<columns.getColumnCount(); j++){
strBuffer1.append(columns.getColumnHeader(j)); /*得到所有列头信息并放入StringBuffer中*/
strBuffer1.append(","); /*添加分隔符*/
}
那为什么我们要在每一个字段之后加上一个“,”号呢?这里我们把数据传递到后台做准备的,这样我们就只需要把一个字符串传递到后台中,然后再在后台中利用java的split方法把数据再提取出来
得到勾选的数据的编号,即数据在数据库的id号,我们也是利用字符串向后台进行传递:
for(var k=2; k<columns.getColumnCount(); k++){
strBuffer2.append(columns.getDataIndex(k)); /*得到所有列头信息并放入StringBuffer中*/
strBuffer2.append(","); /*添加分隔符*/
}
已经把前台的各项数据都已经得到,那么就需要向后台来传递啦!!
这里我们是做出了一个Ext的一个简单的弹出窗口来实现的,
这里我们是利用Ext.form的submit()方式进行的提交,在这里一定要注意是submit()方式,而不能是Ajax,这与我们后面的弹出导出Excel的窗口是紧密相连的,关键代码:
var f = new Ext.FormPanel({
frame:true,
layout:"form",
buttonAlign:'center',
onSubmit: Ext.emptyFn,
submit: function() {
this.getEl().dom.action= url;
this.getEl().dom.method = 'post',
this.getEl().dom.submit(),
win.close()
},
…………
var btnSubmit = new Ext.Button({
text: "提交",
handler: function(){
f.getForm().submit();
}
});
以这种方式提交,并不是真正的Ajax,而是类似于普通Html的表单提交方式,
看后台代码如何来解析从前台获得的数据:
String empStr = request.getParameter("headers"); //拆分字符串得到表头信息
if(!"".equals(empStr) && null!= empStr){
String str1 = empStr.substring(0, empStr.length()-1);
headers = str1.split(",");
}
这样就把前台的数据传递到后台,然后就是进行流的输入输出,生成Excel:关键代码如下
WritableWorkbook wwb = Workbook.createWorkbook(os);
for (int j = 0; j < title.length; j++) {// 开始写入第一行(即标题栏)
Label label = null; // 用于写入文本内容到工作表中去
label = new Label(j, 0, title[j]); // 在Label对象的构造中指明单元格位置(参数依次代表列数、行数、内容 )
sheet.setColumnView(j, 30); // 将定义好的单元格添加到工作表中
sheet.addCell(label);
}
for (int row = 0; row < empList.size(); row++) { // 开始写入内容
List list = (List) empList.get(row); // 获取一条(一行)记录
for (int col = 0; col < list.size(); col++) { // 数据是文本时(用label写入到工作表中)
String listvalue = (String) list.get(col).toString();
Label label = null;
label = new Label(col, row + 1, listvalue);
sheet.addCell(label);
}
}
然后就是弹出窗口,提示用户进行“打开”或者是“保存”啦!!
OutputStream out = null;
InputStream in = null;
// 获得文件名
String filename = URLEncoder.encode(file.getName(), "UTF-8");
// 定义输出类型(下载)
response.setContentType("application/force-download");
response.setHeader("Location", filename);
// 定义输出文件头
response.setHeader("Content-Disposition", "attachment;filename="
+ filename);
out = response.getOutputStream();
in = new FileInputStream(file.getPath());
byte[] buffer = new byte[1024];
int i = -1;
while ((i = in.read(buffer)) != -1) {
out.write(buffer, 0, i);
}
in.close();
out.flush();
out.close();
if (isDel) {
// 删除文件,删除前关闭所有的Stream.
file.delete();
}
搞定。。。
这是第二种,使用EXT控件,直接实现导出grid,方式最为简单,另辟捷径,但需要客户端开activex !
老外的方法:
GridPanel to real Excel file(Only By IE5+,Windows,Office)
What ?
There is only one static function in the object Ext.ux.Grid2Excel ,
You can use it anywhere to convert the data from a gridpanel to a local real excel file.
Where ?
It use a object(ActiveXObject("Excel.application") to create a real excel file,so it works at only windows platform with the office software installed.And then modifying the settings of the IE security to activate the activex may be necessary too.
How ?
Like this:
Ext.ux.Grid2Excel.Save2Excel(grid);
Core Code List and Demo
grid2excel.js:
1/**
2 * @author qinjinwei
3 *
4 * time: 2008-7-24 20:28:02
5 */
6var idTmr = "";
7Ext.ux.Grid2Excel = {
8
9 Save2Excel : function(grid)
10 {
11 var cm = grid.getColumnModel();
12 var store = grid.getStore();
13
14 var it = store.data.items;
15 var rows = it.length;
16
17 var oXL = new ActiveXObject("Excel.application");
18 var oWB = oXL.Workbooks.Add();
19 var oSheet = oWB.ActiveSheet;
20
21 for (var i = 0; i < cm.getColumnCount(); i++) {
22
23 if (!cm.isHidden(i)) {
24 oSheet.Cells(1, i + 1).value = cm.getColumnHeader(i);
25 }
26
27 for (var j = 0; j < rows; j++) {
28 r = it[j].data;
29 var v = r[cm.getDataIndex(i)];
30 var fld = store.recordType.prototype.fields.get(cm.getDataIndex(i));
31 if(fld.type == 'date')
32 {
33 v = v.format('Y-m-d');
34 }
35
36 oSheet.Cells(2 + j, i + 1).value = v;
37 }
38 }
39 oXL.DisplayAlerts = false;
40 oXL.Save();
41 oXL.DisplayAlerts = true;
42 oXL.Quit();
43 oXL = null;
44 idTmr = window.setInterval("Cleanup();",1);
45 }
46};
47function Cleanup() {
48 window.clearInterval(idTmr);
49 CollectGarbage();
50};
51
Demo :
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2<html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5 <link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css">
6 <link rel="stylesheet" type="text/css" href="./ext/resources/css/ext-all.css">
7 <script type="text/javascript" src="./ext/adapter/ext/ext-base.js">
8 </script>
9 <script type="text/javascript" src="./ext/ext-all-debug.js">
10 </script>
11 <script type="text/javascript" src="grid2excel.js">
12 </script>
13 </head>
14 <body>
15 <script type="text/javascript">
16 Ext.onReady(function(){
17
18 var myData = [['3m Co', 71.72, 0.02, 0.03, '9/1 12:00am'], ['Alcoa Inc', 29.01, 0.42, 1.47, '9/1 12:00am'], ['Altria Group Inc', 83.81, 0.28, 0.34, '9/1 12:00am'], ['American Express Company', 52.55, 0.01, 0.02, '9/1 12:00am']];
19
20 var store = new Ext.data.SimpleStore({
21 fields: [{
22 name: 'company'
23 }, {
24 name: 'price',
25 type: 'float'
26 }, {
27 name: 'change',
28 type: 'float'
29 }, {
30 name: 'pctChange',
31 type: 'float'
32 }, {
33 name: 'lastChange',
34 type: 'date',
35 dateFormat: 'n/j h:ia'
36 }]
37 });
38 store.loadData(myData);
39
40 // create the Grid
41 var grid = new Ext.grid.GridPanel({
42 id: 'static-grid',
43 store: store,
44 renderTo: 'grid-example',
45 columns: [{
46 id: 'company',
47 header: "Company",
48 width: 160,
49 sortable: true,
50 dataIndex: 'company'
51 }, {
52 header: "Price",
53 width: 75,
54 sortable: true,
55 //renderer: 'usMoney',
56 dataIndex: 'price'
57 }, {
58 header: "Change",
59 width: 75,
60 sortable: true,
61 dataIndex: 'change'
62 }, {
63 header: "% Change",
64 width: 75,
65 sortable: true,
66 dataIndex: 'pctChange'
67 }, {
68 header: "Last Updated",
69 width: 85,
70 sortable: true,
71 renderer: Ext.util.Format.dateRenderer('m/d/Y'),
72 dataIndex: 'lastChange'
73 }],
74 //stripeRows: true,
75 //autoExpandColumn: 'company',
76 height: 350,
77 width: 600,
78 title: 'Array Grid',
79 bbar: new Ext.Toolbar({
80 buttons: [{
81 text: 'µ¼³öExcel',
82 tooltip: 'µ¼³öExcel',
83 handler: onItemClick // °´Å¥Ê¼þ
84 }]
85 })
86 });
87
88 function onItemClick(item){
89
90 Ext.ux.Grid2Excel.Save2Excel(grid);
91 }
92
93 //grid.render('grid-example');
94 //grid.getSelectionModel().selectFirstRow();
95 });
96 </script>
97 <div id="grid-example">
98 </div>
99 </body>
100</html>
101
相关推荐
总结来说,"Ext Grid 导出Excel"这个话题涵盖了从JavaScript数据结构到Excel文件格式转换的过程,涉及到的主要技术有Ext JS的Grid和Store组件,以及第三方库SheetJS。这个过程对于那些需要提供数据导出功能的Web应用...
支持Ext3 Ext4导出excel,客户端导出表格,支持各种主流浏览器。
综上所述,EXT Grid导出Excel涉及到的技术主要包括EXT Grid的数据操作、XLSX.js库的使用、自定义按钮和事件处理、文件下载触发机制以及可能的样式转换和性能优化。通过这些技术,我们可以实现EXT Grid数据的便捷导出...
EXT Grid导出Excel功能的核心是利用浏览器的Blob对象和FileSaver.js库。Blob对象可以用来存储二进制数据,而FileSaver.js则提供了在用户本地保存文件的能力。首先,我们需要确保EXT Grid的数据已经加载完成并且正确...
这篇博客“Ext Grid导出Excel”探讨的主题是如何将Ext Grid中的数据显示在Microsoft Excel文件中,这在数据分析、报告生成以及数据共享场景中非常常见。通过这个功能,用户可以方便地将网格数据导出为标准的Excel...
Ext.ptx.SlideMsg.msg("信息提示", "导出Excel成功!"); }, failure: function(response, request) { Ext.getBody().unmask(); Ext.MessageBox.alert("出现异常", response.responseText); } }); } ``` ### 3...
本文将深入讲解EXTJS Grid如何实现数据导出到Excel文件的功能。 首先,我们要明白EXTJS Grid的数据导出到Excel的过程通常涉及到以下几个步骤: 1. **获取Grid数据**:在EXTJS中,Grid的数据存储在Store对象中。要...
在导出Excel功能中,表格组件通常用于展示和操作数据。 2. **数据源**:EXTJS的数据模型(Model)和数据存储(Store)系统是处理数据的基础。数据存储可以与服务器端进行交互,加载或保存数据。在导出功能中,我们...
在EXT Grid中,导出数据...以上就是EXT Grid导出Excel的基本流程和技术要点。在"engierManger"这个项目中,你可能需要结合具体的业务逻辑和代码实现这个功能。记住,始终要关注用户体验,确保导出过程快速且用户友好。
在IT行业中,尤其是在Web...总之,从`Ext.grid`导出Excel涉及到数据获取、XML构建、样式处理和浏览器文件操作等多个环节。通过熟练掌握这些技术,你可以为用户提供更强大、更灵活的数据导出功能,提升他们的使用体验。
总的来说,“EXTgrid导出excel”是一个实用的功能,通过JavaScript和相关的库,可以方便地实现EXTgrid数据与Excel之间的转换,为用户提供更灵活的数据操作方式。对于开发人员来说,理解这个过程可以帮助优化和扩展这...
总的来说,这个JSP实现的EXT Grid导出Excel例子是一个实用且常见的Web开发需求,它涉及到EXT JS的使用、AJAX通信、服务器端处理以及文件下载等多个技术点。通过这个例子,开发者可以学习到如何将前端的动态数据有效...
ExtJs 4.2版本提供了内置的`Ext.grid.feature.Exporter`插件,它允许你直接从Grid导出数据到CSV或Excel格式。以下是使用此方法的步骤: 1. 在Grid配置中,添加`Exporter`插件。你需要指定导出的类型(如'csv'或'...
本篇将详细讲解两种常见的导出Excel的方法:普通方式和Ext方式。 首先,让我们从普通方式导出Excel开始。普通方式通常指的是使用服务器端编程语言(如Java、Python、C#等)生成Excel文件,然后将其作为HTTP响应返回...
ext5.0 根据网络上的导出文件替换ext2.0中的函数和属性。 无选择项默认导出全表。...没有研究出data uri协议导出excel文件时动态修改文件名的方法,使用html5中的download属性可以,为了兼容html4未使用。
以上就是EXTJS Grid导出Excel的基本流程。在实际应用中,我们可能还需要考虑数据格式化、样式设置、错误处理等细节问题,以提供更好的用户体验。同时,由于EXTJS版本更新频繁,不同版本的EXTJS Grid导出功能可能会...
根据网络上已有的导出代码,替换ext2.0中的函数和属性为ext5.0版本。 无选择项默认导出全表。...没有研究出data uri协议导出excel文件时动态修改文件名的方法,使用html5中的download属性可以,为了兼容html4未使用。
在这个"EXT导出Excel代码demo"中,我们将探讨如何使用EXT 3.3实现将数据导出到Excel文件的功能。 在EXT应用中,导出数据到Excel通常涉及到以下几个关键步骤: 1. 数据准备:首先,你需要收集并格式化要导出的数据...
总结一下,实现ExtJS4前台Grid导出Excel的功能主要涉及以下几个步骤: 1. 获取Grid的数据。 2. 使用SheetJS库将数据转换为Excel格式。 3. 设置工作簿的元数据,如表头和列宽。 4. 将工作簿写入Blob对象,然后通过`...
"extjs4导出excel"的功能就是实现了这个需求,让用户能够在ExtJS 4应用中方便地导出表格数据到Excel文件。 在ExtJS 4中实现数据导出至Excel通常涉及以下几个关键步骤: 1. **数据收集**:首先,你需要收集要导出的...