flash Buider 4.0 中用AS3实现从datagrid中导出Excel
前面要实现一个导出Excel文件的功能,查找的很多的资料,基本都是组成html代码再交由后台php处理。这里直接用AS3对Datagrid进行处理并生成Excel文件下载。欢迎提出宝贵意见。
导出和Datagrid显示一样的Excel表格。
其中要在项目lib中添加一个SWC文件:下载
中间还可以设置,是否导出Datagrid中隐藏的列。
//导出Excel的函数------------------------------------------------------------- //实现思路,先获取datagrid中显示的行和列的数目,在生成生成Excel表格 private var str:String = ""; private var sheet:Sheet; private var mbytes:ByteArray; private var file:FileReference; private function onCreate(dg:DataGrid):void { //Alert.show(toString() , "tishi"); var selectedRow:int; var tempCount:int=10000; var rCount:int; //数据行数 var lCount:int = 0; selectedRow=dg.selectedIndex; dg.selectedIndex=tempCount; rCount=dg.selectedIndex+1; dg.selectedIndex=selectedRow; /* Alert.show(rCount.toString() , "行数"); //Alert.show(prisonersList.getItemAt(1).cPersonNo,"tishi"); Alert.show(dg.columns[1].headerText + prisonersList.getItemAt(0)[dg.columns[1].dataField],"行名称+行值"); if(dg.columns[1].visible) Alert.show(dg.columns.length.toString() , "列数目"); */ var oldlCount:int = dg.columns.length; for(var i:int = 0; i < oldlCount;i++) if(dg.columns[i].visible) lCount++; else break; //dg.dataProvider.getItemAt(0)[dg.columns[1].dataField] var excelFile:ExcelFile = new ExcelFile(); for(var i:int=0; i<rCount;i++){ for(var j:int = 0; j < lCount; j++){ excelFile.sheets.addItem(generateSheet(0,j,dg.columns[j].headerText)); excelFile.sheets.addItem(generateSheet( i+1 , j , prisonersList.getItemAt(i)[dg.columns[j].dataField])); } } mbytes = excelFile.saveToByteArray(); file = new FileReference(); try { file.save(mbytes,"基本信息管理.xls"); // 定死文件名 } catch (error:Error) { trace("Failed:", error.message) } function generateSheet(i:int,j:int,o:String):Sheet{ if(!sheet){ sheet = new Sheet(); sheet.resize(dataGrid_prisonersList.selectedIndices.length+10,dataGrid_prisonersList.columnCount+10); } sheet.setCell(i, j, String.fromCharCode(127)+o); return sheet; } }