这两天项目上要求做一个导出Excel的功能,项目前台用的ExtJS,后台用的JAVA,网上查了查,大概有3种做法。
1.apache公司提供的POI
2.韩国公司的JXL
3.据说是官方提供的JS调用方法
前两种都要引入外包,懒得找包了,采用了第三种,所需引入JS代码如下:
/Files/rockblue1988/export.txt
注意事项:
1.exportUrl.jsp的页面只需要以上的代码,多余的都不要了,否则生成的excel文件内容为Null
2.生成的xls文件在Excel打开过程中可能会出现如下错误:
---
加载期间在下述区域中出现了问题(P):
表格
由于错误,此文件无法打开。错误列于:C:\Documents and Settings\..\Local Settings\Temporary Internet
---
这是由于输入的数据中存在空格或者与设置中的类型不符,我遇到的问题就是由于Columns中的header中有类似于“日吨水<br>综合费”这样的属性而产生的,修改即可
3.在Google、FireFox、IE8/IE9测试通过
/**
* allows for downloading of grid data (store) directly into excel
* Method: extracts data of gridPanel store, uses columnModel to construct XML excel document,
* converts to Base64, then loads everything into a data URL link.
*
* @author Animal <extjs support team>
*
*/
/**
* base64 encode / decode
*
* @location http://www.webtoolkit.info/
*
*/
var Base64 = (function() {
// Private property
var keyStr ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// Private method for UTF-8 encoding
function utf8Encode(string) {
string = string.replace(/\r\n/g,"\n");
var utftext ="";
for (var n =0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c <128) {
utftext += String.fromCharCode(c);
}
elseif((c >127) && (c <2048)) {
utftext += String.fromCharCode((c >>6) |192);
utftext += String.fromCharCode((c &63) |128);
}
else {
utftext += String.fromCharCode((c >>12) |224);
utftext += String.fromCharCode(((c >>6) &63) |128);
utftext += String.fromCharCode((c &63) |128);
}
}
return utftext;
}
// Public method for encoding
return {
encode : (typeof btoa =='function') ? function(input) {
return btoa(utf8Encode(input));
} : function (input) {
var output ="";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i =0;
input = utf8Encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >>2;
enc2 = ((chr1 &3) <<4) | (chr2 >>4);
enc3 = ((chr2 &15) <<2) | (chr3 >>6);
enc4 = chr3 &63;
if (isNaN(chr2)) {
enc3 = enc4 =64;
} elseif (isNaN(chr3)) {
enc4 =64;
}
output = output +
keyStr.charAt(enc1) + keyStr.charAt(enc2) +
keyStr.charAt(enc3) + keyStr.charAt(enc4);
}
return output;
}
};
})();
Ext.override(Ext.grid.GridPanel, {
getExcelXml: function(includeHidden) {
var worksheet =this.createWorksheet(includeHidden);
var totalWidth =this.getColumnModel().getTotalWidth(includeHidden);
return'<xml version="1.0" encoding="utf-8">'+
'<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">'+
'<o:DocumentProperties><o:Title>'+this.title +'</o:Title></o:DocumentProperties>'+
'<ss:ExcelWorkbook>'+
'<ss:WindowHeight>'+ worksheet.height +'</ss:WindowHeight>'+
'<ss:WindowWidth>'+ worksheet.width +'</ss:WindowWidth>'+
'<ss:ProtectStructure>False</ss:ProtectStructure>'+
'<ss:ProtectWindows>False</ss:ProtectWindows>'+
'</ss:ExcelWorkbook>'+
'<ss:Styles>'+
'<ss:Style ss:ID="Default">'+
'<ss:Alignment ss:Vertical="Top" ss:WrapText="1" />'+
'<ss:Font ss:FontName="arial" ss:Size="10" />'+
'<ss:Borders>'+
'<ss:Border ss:Color="#e4e4e4" ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Top" />'+
'<ss:Border ss:Color="#e4e4e4" ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Bottom" />'+
'<ss:Border ss:Color="#e4e4e4" ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Left" />'+
'<ss:Border ss:Color="#e4e4e4" ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Right" />'+
'</ss:Borders>'+
'<ss:Interior />'+
'<ss:NumberFormat />'+
'<ss:Protection />'+
'</ss:Style>'+
'<ss:Style ss:ID="title">'+
'<ss:Borders />'+
'<ss:Font />'+
'<ss:Alignment ss:WrapText="1" ss:Vertical="Center" ss:Horizontal="Center" />'+
'<ss:NumberFormat ss:Format="@" />'+
'</ss:Style>'+
'<ss:Style ss:ID="headercell">'+
'<ss:Font ss:Bold="1" ss:Size="10" />'+
'<ss:Alignment ss:WrapText="1" ss:Horizontal="Center" />'+
'<ss:Interior ss:Pattern="Solid" ss:Color="#A3C9F1" />'+
'</ss:Style>'+
'<ss:Style ss:ID="even">'+
'<ss:Interior ss:Pattern="Solid" ss:Color="#CCFFFF" />'+
'</ss:Style>'+
'<ss:Style ss:Parent="even" ss:ID="evendate">'+
'<ss:NumberFormat ss:Format="yyyy-mm-dd" />'+
'</ss:Style>'+
'<ss:Style ss:Parent="even" ss:ID="evenint">'+
'<ss:NumberFormat ss:Format="0" />'+
'</ss:Style>'+
'<ss:Style ss:Parent="even" ss:ID="evenfloat">'+
'<ss:NumberFormat ss:Format="0.00" />'+
'</ss:Style>'+
'<ss:Style ss:ID="odd">'+
'<ss:Interior ss:Pattern="Solid" ss:Color="#CCCCFF" />'+
'</ss:Style>'+
'<ss:Style ss:Parent="odd" ss:ID="odddate">'+
'<ss:NumberFormat ss:Format="yyyy-mm-dd" />'+
'</ss:Style>'+
'<ss:Style ss:Parent="odd" ss:ID="oddint">'+
'<ss:NumberFormat ss:Format="0" />'+
'</ss:Style>'+
'<ss:Style ss:Parent="odd" ss:ID="oddfloat">'+
'<ss:NumberFormat ss:Format="0.00" />'+
'</ss:Style>'+
'</ss:Styles>'+
worksheet.xml +
'</ss:Workbook>';
},
createWorksheet: function(includeHidden) {
// Calculate cell data types and extra class names which affect formatting
var cellType = [];
var cellTypeClass = [];
var cm =this.getColumnModel();
var totalWidthInPixels =0;
var colXml ='';
var headerXml ='';
var visibleColumnCountReduction =0;
var colCount = cm.getColumnCount();
for (var i =0; i < colCount; i++) {
if ((cm.getDataIndex(i) !='')
&& (includeHidden ||!cm.isHidden(i))) {
var w = cm.getColumnWidth(i)
totalWidthInPixels += w;
if (cm.getColumnHeader(i) ===""){
cellType.push("None");
cellTypeClass.push("");
++visibleColumnCountReduction;
}
else
{
colXml +='<ss:Column ss:AutoFitWidth="1" ss:Width="'+ w +'" />';
headerXml +='<ss:Cell ss:StyleID="headercell">'+
'<ss:Data ss:Type="String">'+ cm.getColumnHeader(i) +'</ss:Data>'+
'<ss:NamedCell ss:Name="Print_Titles" /></ss:Cell>';
var fld =this.store.recordType.prototype.fields.get(cm.getDataIndex(i));
switch(fld.type) {
case"int":
cellType.push("Number");
cellTypeClass.push("int");
break;
case"float":
cellType.push("Number");
cellTypeClass.push("float");
break;
case"bool":
case"boolean":
cellType.push("String");
cellTypeClass.push("");
break;
case"date":
cellType.push("DateTime");
cellTypeClass.push("date");
break;
default:
cellType.push("String");
cellTypeClass.push("");
break;
}
}
}
}
var visibleColumnCount = cellType.length - visibleColumnCountReduction;
var result = {
height: 9000,
width: Math.floor(totalWidthInPixels *30) +50
};
// Generate worksheet header details.
var t ='<ss:Worksheet ss:Name="'+this.title +'">'+
'<ss:Names>'+
'<ss:NamedRange ss:Name="Print_Titles" ss:RefersTo="=\'' + this.title + '\'!R1:R2" />'+
'</ss:Names>'+
'<ss:Table x:FullRows="1" x:FullColumns="1"'+
' ss:ExpandedColumnCount="'+ (visibleColumnCount +2) +
'" ss:ExpandedRowCount="'+ (this.store.getCount() +2) +'">'+
colXml +
'<ss:Row ss:Height="38">'+
'<ss:Cell ss:StyleID="title" ss:MergeAcross="'+ (visibleColumnCount -1) +'">'+
'<ss:Data xmlns:html="http://www.w3.org/TR/REC-html40" ss:Type="String">'+
'<html:B></html:B></ss:Data><ss:NamedCell ss:Name="Print_Titles" />'+
'</ss:Cell>'+
'</ss:Row>'+
'<ss:Row ss:AutoFitHeight="1">'+
headerXml +
'</ss:Row>';
// Generate the data rows from the data in the Store
for (var i =0, it =this.store.data.items, l = it.length; i < l; i++) {
t +='<ss:Row>';
var cellClass = (i &1) ?'odd' : 'even';
r = it[i].data;
var k =0;
for (var j =0; j < colCount; j++) {
if ((cm.getDataIndex(j) !='')
&& (includeHidden ||!cm.isHidden(j))) {
var v = r[cm.getDataIndex(j)];
if (cellType[k] !=="None") {
t +='<ss:Cell ss:StyleID="'+ cellClass + cellTypeClass[k] +'"><ss:Data ss:Type="'+ cellType[k] +'">';
if (cellType[k] =='DateTime') {
t += v.format('Y-m-d');
} else {
t += v;
}
t +='</ss:Data></ss:Cell>';
}
k++;
}
}
t +='</ss:Row>';
}
result.xml = t +'</ss:Table>'+
'<x:WorksheetOptions>'+
'<x:PageSetup>'+
'<x:Layout x:CenterHorizontal="1" x:Orientation="Landscape" />'+
'<x:Footer x:Data="Page &P of &N" x:Margin="0.5" />'+
'<x:PageMargins x:Top="0.5" x:Right="0.5" x:Left="0.5" x:Bottom="0.8" />'+
'</x:PageSetup>'+
'<x:FitToPage />'+
'<x:Print>'+
'<x:PrintErrors>Blank</x:PrintErrors>'+
'<x:FitWidth>1</x:FitWidth>'+
'<x:FitHeight>32767</x:FitHeight>'+
'<x:ValidPrinterInfo />'+
'<x:VerticalResolution>600</x:VerticalResolution>'+
'</x:Print>'+
'<x:Selected />'+
'<x:DoNotDisplayGridlines />'+
'<x:ProtectObjects>False</x:ProtectObjects>'+
'<x:ProtectScenarios>False</x:ProtectScenarios>'+
'</x:WorksheetOptions>'+
'</ss:Worksheet>';
return result;
}
});
ExtJS中的导出按钮代码如下:* allows for downloading of grid data (store) directly into excel
* Method: extracts data of gridPanel store, uses columnModel to construct XML excel document,
* converts to Base64, then loads everything into a data URL link.
*
* @author Animal <extjs support team>
*
*/
/**
* base64 encode / decode
*
* @location http://www.webtoolkit.info/
*
*/
var Base64 = (function() {
// Private property
var keyStr ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// Private method for UTF-8 encoding
function utf8Encode(string) {
string = string.replace(/\r\n/g,"\n");
var utftext ="";
for (var n =0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c <128) {
utftext += String.fromCharCode(c);
}
elseif((c >127) && (c <2048)) {
utftext += String.fromCharCode((c >>6) |192);
utftext += String.fromCharCode((c &63) |128);
}
else {
utftext += String.fromCharCode((c >>12) |224);
utftext += String.fromCharCode(((c >>6) &63) |128);
utftext += String.fromCharCode((c &63) |128);
}
}
return utftext;
}
// Public method for encoding
return {
encode : (typeof btoa =='function') ? function(input) {
return btoa(utf8Encode(input));
} : function (input) {
var output ="";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i =0;
input = utf8Encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >>2;
enc2 = ((chr1 &3) <<4) | (chr2 >>4);
enc3 = ((chr2 &15) <<2) | (chr3 >>6);
enc4 = chr3 &63;
if (isNaN(chr2)) {
enc3 = enc4 =64;
} elseif (isNaN(chr3)) {
enc4 =64;
}
output = output +
keyStr.charAt(enc1) + keyStr.charAt(enc2) +
keyStr.charAt(enc3) + keyStr.charAt(enc4);
}
return output;
}
};
})();
Ext.override(Ext.grid.GridPanel, {
getExcelXml: function(includeHidden) {
var worksheet =this.createWorksheet(includeHidden);
var totalWidth =this.getColumnModel().getTotalWidth(includeHidden);
return'<xml version="1.0" encoding="utf-8">'+
'<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office">'+
'<o:DocumentProperties><o:Title>'+this.title +'</o:Title></o:DocumentProperties>'+
'<ss:ExcelWorkbook>'+
'<ss:WindowHeight>'+ worksheet.height +'</ss:WindowHeight>'+
'<ss:WindowWidth>'+ worksheet.width +'</ss:WindowWidth>'+
'<ss:ProtectStructure>False</ss:ProtectStructure>'+
'<ss:ProtectWindows>False</ss:ProtectWindows>'+
'</ss:ExcelWorkbook>'+
'<ss:Styles>'+
'<ss:Style ss:ID="Default">'+
'<ss:Alignment ss:Vertical="Top" ss:WrapText="1" />'+
'<ss:Font ss:FontName="arial" ss:Size="10" />'+
'<ss:Borders>'+
'<ss:Border ss:Color="#e4e4e4" ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Top" />'+
'<ss:Border ss:Color="#e4e4e4" ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Bottom" />'+
'<ss:Border ss:Color="#e4e4e4" ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Left" />'+
'<ss:Border ss:Color="#e4e4e4" ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Right" />'+
'</ss:Borders>'+
'<ss:Interior />'+
'<ss:NumberFormat />'+
'<ss:Protection />'+
'</ss:Style>'+
'<ss:Style ss:ID="title">'+
'<ss:Borders />'+
'<ss:Font />'+
'<ss:Alignment ss:WrapText="1" ss:Vertical="Center" ss:Horizontal="Center" />'+
'<ss:NumberFormat ss:Format="@" />'+
'</ss:Style>'+
'<ss:Style ss:ID="headercell">'+
'<ss:Font ss:Bold="1" ss:Size="10" />'+
'<ss:Alignment ss:WrapText="1" ss:Horizontal="Center" />'+
'<ss:Interior ss:Pattern="Solid" ss:Color="#A3C9F1" />'+
'</ss:Style>'+
'<ss:Style ss:ID="even">'+
'<ss:Interior ss:Pattern="Solid" ss:Color="#CCFFFF" />'+
'</ss:Style>'+
'<ss:Style ss:Parent="even" ss:ID="evendate">'+
'<ss:NumberFormat ss:Format="yyyy-mm-dd" />'+
'</ss:Style>'+
'<ss:Style ss:Parent="even" ss:ID="evenint">'+
'<ss:NumberFormat ss:Format="0" />'+
'</ss:Style>'+
'<ss:Style ss:Parent="even" ss:ID="evenfloat">'+
'<ss:NumberFormat ss:Format="0.00" />'+
'</ss:Style>'+
'<ss:Style ss:ID="odd">'+
'<ss:Interior ss:Pattern="Solid" ss:Color="#CCCCFF" />'+
'</ss:Style>'+
'<ss:Style ss:Parent="odd" ss:ID="odddate">'+
'<ss:NumberFormat ss:Format="yyyy-mm-dd" />'+
'</ss:Style>'+
'<ss:Style ss:Parent="odd" ss:ID="oddint">'+
'<ss:NumberFormat ss:Format="0" />'+
'</ss:Style>'+
'<ss:Style ss:Parent="odd" ss:ID="oddfloat">'+
'<ss:NumberFormat ss:Format="0.00" />'+
'</ss:Style>'+
'</ss:Styles>'+
worksheet.xml +
'</ss:Workbook>';
},
createWorksheet: function(includeHidden) {
// Calculate cell data types and extra class names which affect formatting
var cellType = [];
var cellTypeClass = [];
var cm =this.getColumnModel();
var totalWidthInPixels =0;
var colXml ='';
var headerXml ='';
var visibleColumnCountReduction =0;
var colCount = cm.getColumnCount();
for (var i =0; i < colCount; i++) {
if ((cm.getDataIndex(i) !='')
&& (includeHidden ||!cm.isHidden(i))) {
var w = cm.getColumnWidth(i)
totalWidthInPixels += w;
if (cm.getColumnHeader(i) ===""){
cellType.push("None");
cellTypeClass.push("");
++visibleColumnCountReduction;
}
else
{
colXml +='<ss:Column ss:AutoFitWidth="1" ss:Width="'+ w +'" />';
headerXml +='<ss:Cell ss:StyleID="headercell">'+
'<ss:Data ss:Type="String">'+ cm.getColumnHeader(i) +'</ss:Data>'+
'<ss:NamedCell ss:Name="Print_Titles" /></ss:Cell>';
var fld =this.store.recordType.prototype.fields.get(cm.getDataIndex(i));
switch(fld.type) {
case"int":
cellType.push("Number");
cellTypeClass.push("int");
break;
case"float":
cellType.push("Number");
cellTypeClass.push("float");
break;
case"bool":
case"boolean":
cellType.push("String");
cellTypeClass.push("");
break;
case"date":
cellType.push("DateTime");
cellTypeClass.push("date");
break;
default:
cellType.push("String");
cellTypeClass.push("");
break;
}
}
}
}
var visibleColumnCount = cellType.length - visibleColumnCountReduction;
var result = {
height: 9000,
width: Math.floor(totalWidthInPixels *30) +50
};
// Generate worksheet header details.
var t ='<ss:Worksheet ss:Name="'+this.title +'">'+
'<ss:Names>'+
'<ss:NamedRange ss:Name="Print_Titles" ss:RefersTo="=\'' + this.title + '\'!R1:R2" />'+
'</ss:Names>'+
'<ss:Table x:FullRows="1" x:FullColumns="1"'+
' ss:ExpandedColumnCount="'+ (visibleColumnCount +2) +
'" ss:ExpandedRowCount="'+ (this.store.getCount() +2) +'">'+
colXml +
'<ss:Row ss:Height="38">'+
'<ss:Cell ss:StyleID="title" ss:MergeAcross="'+ (visibleColumnCount -1) +'">'+
'<ss:Data xmlns:html="http://www.w3.org/TR/REC-html40" ss:Type="String">'+
'<html:B></html:B></ss:Data><ss:NamedCell ss:Name="Print_Titles" />'+
'</ss:Cell>'+
'</ss:Row>'+
'<ss:Row ss:AutoFitHeight="1">'+
headerXml +
'</ss:Row>';
// Generate the data rows from the data in the Store
for (var i =0, it =this.store.data.items, l = it.length; i < l; i++) {
t +='<ss:Row>';
var cellClass = (i &1) ?'odd' : 'even';
r = it[i].data;
var k =0;
for (var j =0; j < colCount; j++) {
if ((cm.getDataIndex(j) !='')
&& (includeHidden ||!cm.isHidden(j))) {
var v = r[cm.getDataIndex(j)];
if (cellType[k] !=="None") {
t +='<ss:Cell ss:StyleID="'+ cellClass + cellTypeClass[k] +'"><ss:Data ss:Type="'+ cellType[k] +'">';
if (cellType[k] =='DateTime') {
t += v.format('Y-m-d');
} else {
t += v;
}
t +='</ss:Data></ss:Cell>';
}
k++;
}
}
t +='</ss:Row>';
}
result.xml = t +'</ss:Table>'+
'<x:WorksheetOptions>'+
'<x:PageSetup>'+
'<x:Layout x:CenterHorizontal="1" x:Orientation="Landscape" />'+
'<x:Footer x:Data="Page &P of &N" x:Margin="0.5" />'+
'<x:PageMargins x:Top="0.5" x:Right="0.5" x:Left="0.5" x:Bottom="0.8" />'+
'</x:PageSetup>'+
'<x:FitToPage />'+
'<x:Print>'+
'<x:PrintErrors>Blank</x:PrintErrors>'+
'<x:FitWidth>1</x:FitWidth>'+
'<x:FitHeight>32767</x:FitHeight>'+
'<x:ValidPrinterInfo />'+
'<x:VerticalResolution>600</x:VerticalResolution>'+
'</x:Print>'+
'<x:Selected />'+
'<x:DoNotDisplayGridlines />'+
'<x:ProtectObjects>False</x:ProtectObjects>'+
'<x:ProtectScenarios>False</x:ProtectScenarios>'+
'</x:WorksheetOptions>'+
'</ss:Worksheet>';
return result;
}
});
{
text : "导出到excel",
style : {
marginRight : '20px'
},
handler : function() {
var vExportContent = gridpanel.getExcelXml(); //获取数据
if (Ext.isIE8||Ext.isIE6 || Ext.isIE7 || Ext.isSafari
|| Ext.isSafari2 || Ext.isSafari3) { //判断浏览器
var fd = Ext.get('frmDummy');
if (!fd) {
fd = Ext.DomHelper.append(
Ext.getBody(), {
tag : 'form',
method : 'post',
id : 'frmDummy',
action : 'exportUrl.jsp',
target : '_blank',
name : 'frmDummy',
cls : 'x-hidden',
cn : [ {
tag : 'input',
name : 'exportContent',
id : 'exportContent',
type : 'hidden'
} ]
}, true);
}
fd.child('#exportContent').set( {
value : vExportContent
});
fd.dom.submit();
} else {
document.location ='data:application/vnd.ms-excel;base64,'+ Base64
.encode(vExportContent);
}
}}
text : "导出到excel",
style : {
marginRight : '20px'
},
handler : function() {
var vExportContent = gridpanel.getExcelXml(); //获取数据
if (Ext.isIE8||Ext.isIE6 || Ext.isIE7 || Ext.isSafari
|| Ext.isSafari2 || Ext.isSafari3) { //判断浏览器
var fd = Ext.get('frmDummy');
if (!fd) {
fd = Ext.DomHelper.append(
Ext.getBody(), {
tag : 'form',
method : 'post',
id : 'frmDummy',
action : 'exportUrl.jsp',
target : '_blank',
name : 'frmDummy',
cls : 'x-hidden',
cn : [ {
tag : 'input',
name : 'exportContent',
id : 'exportContent',
type : 'hidden'
} ]
}, true);
}
fd.child('#exportContent').set( {
value : vExportContent
});
fd.dom.submit();
} else {
document.location ='data:application/vnd.ms-excel;base64,'+ Base64
.encode(vExportContent);
}
}}
exportUrl.jsp页面的代码如下:
<%
response.setHeader("Content-Type","application/force-download");
response.setHeader("Content-Type","application/vnd.ms-excel");
response.setHeader("Content-Disposition","attachment;filename=export.xls");
out.print(request.getParameter("exportContent"));
%>
response.setHeader("Content-Type","application/force-download");
response.setHeader("Content-Type","application/vnd.ms-excel");
response.setHeader("Content-Disposition","attachment;filename=export.xls");
out.print(request.getParameter("exportContent"));
%>
1.exportUrl.jsp的页面只需要以上的代码,多余的都不要了,否则生成的excel文件内容为Null
2.生成的xls文件在Excel打开过程中可能会出现如下错误:
---
加载期间在下述区域中出现了问题(P):
表格
由于错误,此文件无法打开。错误列于:C:\Documents and Settings\..\Local Settings\Temporary Internet
---
这是由于输入的数据中存在空格或者与设置中的类型不符,我遇到的问题就是由于Columns中的header中有类似于“日吨水<br>综合费”这样的属性而产生的,修改即可
3.在Google、FireFox、IE8/IE9测试通过
相关推荐
基于EXTJS 的在线EXCEL编辑器,是利用EXTJS的强大功能来实现对Excel文件的在线创建、编辑和查看的功能。这种编辑器允许用户在浏览器中直接处理Excel数据,无需依赖本地安装的Microsoft Excel或其他第三方软件。 ...
在本文中,我们将深入探讨如何使用ExtJS来模拟Excel表格,以及实现Excel的各种功能。 首先,ExtJS中的GridPanel组件是实现模拟Excel表格的核心。GridPanel允许我们展示大量数据,并提供了诸如排序、过滤、分页等...
本文将深入讲解EXTJS Grid如何实现数据导出到Excel文件的功能。 首先,我们要明白EXTJS Grid的数据导出到Excel的过程通常涉及到以下几个步骤: 1. **获取Grid数据**:在EXTJS中,Grid的数据存储在Store对象中。要...
总之,ExtJS6的导出Excel功能结合了分组、分组合计行和二重表头,使得数据网格的数据导出更加灵活且信息丰富。通过自定义和扩展,开发者可以创建满足特定业务场景的导出解决方案。而这个过程往往需要对ExtJS的API有...
用户可以从excel中选中要导入的数据,直接拖拽到grid中
在本文中,我们将深入探讨如何使用ExtJS框架结合Apache POI库来实现Excel导出功能。首先,让我们了解一些基本概念。 **ExtJS框架** ExtJS是一个强大的JavaScript库,专门用于构建富客户端应用程序。它提供了丰富的...
### ExtJS实现Excel导出:深入解析与实践 在当今高度数字化的工作环境中,数据的管理和呈现方式至关重要。其中,Excel作为数据处理和分析的重要工具,其导出功能在各种应用场景中显得尤为关键。ExtJS,作为一种强大...
1. **EXTJS Grid组件**:EXTJS Grid是EXTJS的核心组件之一,它允许开发者创建可分页、可排序、可过滤的数据表格。Grid可以与各种数据源(如JSON、XML或内存中的数组)配合使用,并通过Store对象进行数据的加载和管理...
在EXTJS4中,实现导出数据到Excel的功能是一项常见的需求,这可以帮助用户方便地处理和存储大量数据。本示例将详细介绍EXTJS4如何实现Excel导出,并提供相关的代码示例。 EXTJS4的核心是其组件模型,包括表格(Grid...
"extjs4导出excel"的功能就是实现了这个需求,让用户能够在ExtJS 4应用中方便地导出表格数据到Excel文件。 在ExtJS 4中实现数据导出至Excel通常涉及以下几个关键步骤: 1. **数据收集**:首先,你需要收集要导出的...
在本文中,我们将探讨如何使用ExtJS框架配合Apache POI库来实现Excel的导出功能。ExtJS是一个强大的JavaScript库,专门用于构建富客户端应用程序,它提供了丰富的组件和功能,而无需关注后端技术。Apache POI是Java...
标题 "ExtJS poi 导入excel" 涉及到两个主要技术:ExtJS 和 Apache POI,它们在Java环境中用于处理Excel数据。ExtJS 是一个JavaScript库,主要用于构建富客户端应用程序,而Apache POI是Java的一个开源项目,用于...
标题中的“extjs 数据导出到Excel,数据列自选”指的是使用EXTJS框架实现一个功能,让用户能够从Web应用中选择需要的数据列,并将这些选定的数据导出为Excel文件。EXTJS是一个强大的JavaScript库,专门用于构建富...
当需要将Grid中的数据导出到Excel时,可以采用两种方法,这些方法在ExtJs 4.2版本中已经得到很好的支持。 **方法一:使用XLSX.js库** XLSX.js是一个JavaScript库,能够方便地读取和写入Excel文件。在ExtJs中,你...
在本项目中,我们将探讨如何使用ExtJS来模仿Excel的表格效果,这涉及到表格的动态渲染、数据编辑、排序、过滤以及公式计算等多个方面。 首先,实现Excel的表格效果,我们需要创建一个基于ExtJS的GridPanel。...
这是一个简单的在extjs下的grid转化到Excel,里面代码简单易懂,在包里面还集成了复杂的js转化函数,不过本人没有用它来进行转化! 注:在用EXTJS的导出Excel技术中,一定要注意分页的问题
首先,我们需要了解`Ext.grid.Panel`,这是ExtJS中的核心组件之一,用于创建数据网格。它能够动态加载数据,提供排序、过滤、分页等功能,并且可以自定义列样式和行为。在ExtJS4中,我们可能有以下场景:用户在Grid...
在EXTJS 中,导入和导出Excel 文件是常见的需求,特别是在处理大量数据时,Excel 的格式化和编辑能力非常有用。 ### 导出到Excel EXTJS 提供了多种方式来实现数据到Excel 的导出。一种常见的方式是通过服务器端...
标题 "extjs把数据导出至excel" 涉及的是使用ExtJS 3这个JavaScript框架将数据导出到Excel文件的技术。ExtJS是一个用于构建Web应用的前端库,提供了丰富的组件和API,使得在浏览器端处理数据变得更加方便。在这个...
ExtJs 是一个强大的JavaScript库,专门用于构建富客户端的Web应用程序。在ExtJs中,"Filter"功能是用来处理数据网格(Grid)中的数据过滤,它允许用户根据特定条件快速筛选和查找所需信息。表格过滤是提高用户体验和...