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;  

				}  

}

你可能感兴趣的:(datagrid)