加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex dg转存excel的几种方法。

发布时间:2020-12-15 01:20:22 所属栏目:百科 来源:网络整理
导读:==================================================== 方法一:我这里使用的是tomcat,可以使用的后台jsp或者asp,我用了jsp。这种方法使用了后台的jsp来 /***************************** ??? * 函数名:dgToXls() ??? * 功能:将dg的表信息转为html格式的

====================================================

方法一:我这里使用的是tomcat,可以使用的后台jsp或者asp,我用了jsp。这种方法使用了后台的jsp来

/*****************************
??? * 函数名:dgToXls()
??? * 功能:将dg的表信息转为html格式的字符串
??? * 数据库:无
??? * 参数:无
??? * 返回值:str
??? * 调用函数:
??? * 修改记录:
??? * ***************************/
???public function dgToXls():String
???{
????/** 在导出数据的时候有可能出现单元格数据长度过长而导致Excel在显示时??
???? *? 出现科学计数法或者#特殊符号,在此设置单元格宽度比例WIDTHSCALE,在??
???? *? 代码中每个单元格的宽度扩展适当的比例值WIDTHSCALE。??
???? */??
???? var WIDTHSCALE:Number=2.0;
???? /**??
????? * 将DataGrid转换为htmltable???
????? * @param: dg需要转换成htmltable的DataGrid??
????? * @return: String??
????? */?
???? var font:String = netInspectlogDataGrid.getStyle('fontFamily');??
???? var size:String = netInspectlogDataGrid.getStyle('fontSize');??
???? var str:String = '';??
???? var colors:String = '';??
???? var style:String = 'style="font-family:'+font+';font-size:'+size+'pt;"';??????????????????
???? var headColor:Array=new Array;??
???? //检索DataGrid的 headercolor??
???? if(netInspectlogDataGrid.getStyle("headerColor") != undefined)
???? {??
????? headColor =[ netInspectlogDataGrid.getStyle("headerColor")];??
???? }
???? else
???? {??
????? headColor =[ netInspectlogDataGrid.getStyle("headerColors")];??
???? }?
???? str += '<table width="'+netInspectlogDataGrid.width+'" border="1"><thead><tr width="'+netInspectlogDataGrid.width+'" style="background-color:#' +Number((headColor[0])).toString(16)+'">';
???? //设置tableheader数据(从datagrid的header检索headerText信息)?
???? for(var i:int = 0;i<1/* netInspectlogDataGrid.columns.length */;i++)
???? {??
????? colors = netInspectlogDataGrid.getStyle("themeColor");??
?????
????? if(netInspectlogDataGrid.columns[i].headerText != undefined)
????? {??
?????? str+="<th "+style+">"+netInspectlogDataGrid.columns[i].headerText+"</th>";??
????? }
????? else
????? {??
?????? str+= "<th "+style+">"+netInspectlogDataGrid.columns[i].dataField+"</th>";??
????? }??
???? }???
???? str += "</tr></thead><tbody>";??
???? colors = netInspectlogDataGrid.getStyle("alternatingRowColors");??
???? for(var j:int =0;j< (netInspectLog.length)? ;j++)
???? {???????????????????
????? str +="<tr width=""+Math.ceil(netInspectlogDataGrid.width)+"">";??
?????
????? for(var k:int=0; k < 1/* netInspectlogDataGrid.columns.length */; k++)
????? {?? ??????
?????? if(netInspectlogDataGrid.dataProvider.getItemAt(j) != undefined && netInspectlogDataGrid.dataProvider.getItemAt(j) != null)
?????? {?
??????? if(netInspectlogDataGrid.columns[k].labelFunction != undefined)
??????? {??
???????? str += "<td width=""+Math.ceil(netInspectlogDataGrid.columns[k] .width*WIDTHSCALE)+"" "+style+">"+netInspectlogDataGrid.columns[k].labelFunction(netInspectlogDataGrid.dataProvider.getItemAt(j),netInspectlogDataGrid.columns[k].dataField)+"</td>";
??????? }
??????? else
??????? {??
???????? str += "<td width=""+Math.ceil(netInspectlogDataGrid.columns[k].width*WIDTHSCALE)+"" "+style+">"+netInspectlogDataGrid.dataProvider.getItemAt(j)[(netInspectlogDataGrid.columns[k] as DataGridColumn).dataField]+"</td>";??
??????? }??
?????? }??
????? }??
????? str += "</tr>";??
???? }??
???? str +="</tbody></table>";
???? return str;
???}
???
???/*****************************
??? * 函数名:loadDGInExcel()
??? * 功能:输出excel的jsp方法,将dgToXls()方法返回的str转存到excel
??? * 数据库:无
??? * 参数:无
??? * 返回值:
??? * 调用函数:dgToXls()
??? * 修改记录:
??? * ***************************/
???private function loadDGInExcel(surl:String):void
???{
????/**??
??? * 将制定的DataGrid加载到Excel文件,此方法传入一个htmltable字符串参数到后台Script脚本,然后浏览器给用户提供一个Excel下载??
??? * @author Chenwenfeng??
??? * @params dg 需要导入的数据源DataGrid??
??? * @params url excel文件下载路径??
??? */??
????var variables:URLVariables = new URLVariables();
????variables.htmltable = dgToXls();
????var u:URLRequest = new URLRequest(surl);
????u.data = variables;
????u.method = URLRequestMethod.POST;
????navigateToURL(u,"_self");
???}

菜单上选择输出的时候:

switch (data){

*

中间是其他的一些菜单,这里就略掉了!

*

case "outPut":
??????????loadDGInExcel("http://localhost:8080/sampleone/ExportToXls.jsp");?
??????break;

default:

}

最重要的就是:ExportToXls.jsp文件了,要放到tomcat的Tomcat 6.0webapps"你的工程下",就可以了。

ExportToXls.jsp内部的代码:

<%@ page language="java"%>
<%@ page contentType="application/msexcel;charset=UTF-8"
??? pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
response.setHeader("Content-disposition","attachment; filename=DownLoad.xls");
String str = request.getParameter("htmltable");
out.print(str);
%>

?********************

方法一有一些缺点:当你的datagrid数据量很大的时候,比如说10*10000多的数据,那么就会出现在方法:public function dgToXls():String{return str}时候str会内存溢出!

如果数据量少的话,可以使用。没有问题。

?

==========================================

方法二:这种方法不涉及到后台的调用了,只是用前台来处理就可以实现。

* 输出xls新方法
??=========================================?
??=========================================?
? */
???import mx.controls.dataGridClasses.DataGridColumn;
???import com.as3xls.xls.Cell;
???import mx.collections.ArrayCollection;
???import com.as3xls.xls.Sheet;
???import com.as3xls.xls.ExcelFile;
???
???private var fileReference:FileReference;
???private var xls:Class;
???private var sheet:Sheet;
???
???[Bindable]
???private var fields:Array = new Array();
???
???private function fileReference_Cancel(event:Event):void
???{
????fileReference = null;
???}
???
???private function exportToExcel():void
???{
????sheet = new Sheet();
????var dataProviderCollection:ArrayCollection =netInspectLog;
????var rowCount:int = dataProviderCollection.length;
????sheet.resize(rowCount + 1,netInspectlogDataGrid.columnCount);
????var columns:Array = netInspectlogDataGrid.columns;
????var i:int = 0;
????for each (var field:DataGridColumn in columns){
?????fields.push(field.dataField.toString());/*? .toString() */
?????sheet.setCell(0,i,field.dataField.toString());
?????i++;
????}
????
????for(var r:int=0; r < rowCount; r++)
????{
?????var record:Object = dataProviderCollection.getItemAt(r);
?????/*insert record starting from row no 2 else
?????headers will be overwritten*/
?????insertRecordInSheet(r+1,sheet,record);
????}
????var xls:ExcelFile = new ExcelFile();
????xls.sheets.addItem(sheet);
????
????var bytes: ByteArray = xls.saveToByteArray();
????var fr:FileReference = new FileReference();
????fr.save(bytes,"SampleExport.xls");?
???}
???private function insertRecordInSheet(row:int,shet:Sheet,recod:Object):void
???{
????var colCount:int = netInspectlogDataGrid.columnCount;
????for(var c:int=0; c < colCount; c++)
????{
?????var i:int = 0;
?????for each(var field:String in fields){
??????for each (var value:String in recod){
???????if (recod[field]==null)
????????recod[field]="";
???????if (recod[field].toString() == value)
????????shet.setCell(row,value);
??????}
??????i++;
?????}
????}
???}
??注意的是:一定要把as3xls-1.0.1.swc包导入。它可以用来建立xls文件,并写入信息。as3xls-1.0.swc也可以实现建立xls文件,并写入信息,但是它输出的中文是乱码的,而as3xls-1.0.1.swc可以处理中文乱码。这样就可以实现了dg->xls并且无乱码转存了。

===========================================

方法三:大家可以看一下一位大侠写的帖子,我本人没有怎么仔细看,不过应该是非常简单的。大家看一下这位大侠的博客网址吧:http://jhaij.iteye.com/blog/792786

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读