jquery 和 struts2 实现 excel的下载 100分哦!!
本帖最后由 showbo 于 2013-03-26 09:28:09 编辑 我用jquery 和struts2实现 excel的下载功能,思路是把表单内容存入excel中,首先我写了一个excel的xml格式的通用模板template.xls.txt代码如下
<?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">
<Created>2006-09-16T00:00:00Z</Created>
<LastSaved>2013-03-21T01:24:25Z</LastSaved>
<Version>14.00</Version>
</DocumentProperties>
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
<AllowPNG/>
<RemovePersonalInformation/>
</OfficeDocumentSettings>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>8010</WindowHeight>
<WindowWidth>14805</WindowWidth>
<WindowTopX>240</WindowTopX>
<WindowTopY>105</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Bottom"/>
<Borders/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
{$table}
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Print>
<ValidPrinterInfo/>
<PaperSizeIndex>9</PaperSizeIndex>
<HorizontalResolution>96</HorizontalResolution>
<VerticalResolution>96</VerticalResolution>
</Print>
<Selected/>
<Panes>
<Pane>
<Number>1</Number>
<ActiveRow>1</ActiveRow>
<ActiveCol>1</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
exportExcel={
//定义excel方法
//params: (sender ,表格Dom对象)
export : function(sender){
//定义一个对象用来存放传过来的表格Dom对象
var tableDom;
if(sender!=null){
tableDom=sender;
}else{
alert("该表格无数据,请确认参数中的Dom对象不为空!");
}
//定义一个数组对象用来存放要生成excel中的数据
var record=[];
/**
* 生成xml格式的table头 begin
*/
record.push('<Table ss:ExpandedColumnCount="');
record.push(tableDom.rows[0].cells.length);//获得表格的列宽
record.push('" ss:ExpandedRowCount="');
record.push(tableDom.rows.length);//获得表格的行高
record.push('" x:FullColumns="1"');
record.push(' x:FullRows="1"');
record.push(' ss:DefaultColumnWidth="54"');
record.push(' ss:DefaultRowHeight="13.5">');
/**
* 生成xml格式的table头 end
*/
//循环表格dom对象,把dom对象中的值存放到table数组中
for(i=0;i<tableDom.rows.length;i++){
record.push('<Row ss:AutoFitHeight="0" >');
for(j=0;j<tableDom.rows[i].cells.length;j++){
//判断得到的表格的数据的格式
record.push('<Cell><Data ss:Type="')
if($(tableDom.rows[i].cells[j]).text()||/^(\d{1,9})?$/.test()){
record.push("String");
}else{
record.push("Number");
}
record.push('">');
record.push($(tableDom.rows[i].cells[j]).text());
record.push('</Data></Cell>');
}
record.push('</Row>');
}
//添加上xml格式的table尾
record.push('</Table>');
$.each(record,function(key,val){
//回调函数有两个参数,第一个是元素索引,第二个为当前值
});
//以text形式向record添加template.xmi.txt配置文件中的头和尾
var excelDoc='';
$.ajax({
url : '/js/excel/template.xls.txt',
async: false,
dataType : 'text',
type : 'get',
success : function(data) {
excelDoc=data.replace('{$table}',record.join(''));
},
error:function(){
alert('读取文件失败!');
}
});
//调用push方法,向数组中存放数据
$.ajax({
url : '/management/excel/excel!exportExcel.do',
async: false,
type : 'POST',
data : {data:excelDoc},
success : function(data) {
alert('导出成功');
},
error:function(){
alert('导出失败!');
}
})
}
}
async: false,
type : 'POST',
data : {data:excelDoc},
success : function(data) {
alert('导出成功');
},
error:function(){
alert('导出失败!');
}
})
}
上面红色的这个部分改成用表单提交,提交到隐藏的iframe中,不能用ajax。
<iframe style="display:none" name="ifr"></iframe>
<form method="post" action="/management/excel/excel!exportExcel.do" style="display:none" target="ifr" id="frm">
<input type="hidden" name="data"/>
</form>
<script>
//...........其他代码
var frm=$('#frm').get(0);
frm.data.value=excelDoc;
frm.submit()//.......提交表单
</script>