首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

jquery 跟 struts2 实现 excel的下载 100分哦!

2013-03-29 
jquery和 struts2 实现 excel的下载100分哦!!本帖最后由 showbo 于 2013-03-26 09:28:09 编辑我用jquery

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.js代码如下

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('导出失败!');
}
})
}
}


然后我想用struts2实现得到data这个值也实现了,现在就是想把这个data按照用户选择的路径来保存,请教下怎么弄啊???? excel struts jquery office spreadsheet
[解决办法]
在你的exportExcel方法里写。
[解决办法]
#2 得分:0 回复于: 2013-03-25 15:24:51 
在你的exportExcel方法里写。 
[解决办法]
起码exportExcel发出来看看
[解决办法]
使用poi详细参考
http://blog.csdn.net/tianma630/article/details/8146747
[解决办法]
输出流都获取了,还不知道怎么保存吗?
[解决办法]
你是保存在服务器端还是客户端?

客户端就算客户输入了他本地的路径你无法用js保存到指定路径,只能由客户选择保存的路径,并且只能通过location.href='文件路径'或者提交表单到iframe模拟ajax来实现,ajax获取到的文本内容也无法直接保存成文件

   //调用push方法,向数组中存放数据
         
        $.ajax({
            url : '/management/excel/excel!exportExcel.do',


            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>

热点排行