flex datagrid excel打印AS

来源:互联网 发布:js 函数 this 编辑:程序博客网 时间:2024/05/17 03:25
package com.huike.wms.utils.func
{
 import com.as3xls.xls.Cell;
 import com.as3xls.xls.ExcelFile;
 import com.as3xls.xls.Sheet;
 
 import flash.events.*;
 import flash.net.FileReference;
 import flash.utils.ByteArray;
 
 import mx.collections.ArrayCollection;
 import mx.controls.Alert;
 import mx.controls.DataGrid;
 import mx.controls.dataGridClasses.DataGridColumn;
 public class ExportExcelUtil
 {
  [Embed(source='image/ok.gif')]private static var success:Class;
  [Embed(source='image/exit.gif')]private static var fail:Class;
  public function ExportExcelUtil()
  {
  }
  
    /**导出Excel表格函数,参数为DataGrid**/
    public static function exportToExcel(myDg:DataGrid,excelName:String):void
    { 
     
     var fields:Array = new Array();
     /**生成表对象sheet**/
     var sheet:Sheet= new Sheet();
     var dataProviderCollection:ArrayCollection =myDg.dataProvider as ArrayCollection;
     /**获得表格的行数**/
     var rowCount:int =  dataProviderCollection.length;
     /**设置表格的行数(rowCount+1),列数(myDg.columnCount)**/
     sheet.resize(rowCount+1,myDg.columnCount-1);
     /**获得DateGrid列的内容**/
     var columns:Array = myDg.columns;
     /**循环设置列名的值**/
     /*var i:int = 0; */
     var thenull:DataGridColumn="" as DataGridColumn;
     for(var i:int = 1;i<columns.length;i++){
      var field:DataGridColumn = columns[i]!=null?columns[i]:thenull;
      fields.push(field.dataField.toString());
      sheet.setCell(0,i-1,field.headerText.toString()); //加入标题
     }
    /* for each (var field:DataGridColumn in columns)
     { 
      fields.push(field.dataField.toString());
      第一行的值,取值为myDg的headerText
      sheet.setCell(0,i,field.headerText.toString());
      i++;
     }*/
     /**循环设置行的值**/
     for(var r:int=0;r<rowCount;r++)
     {
      /**获得dataProviderCollection的每行Item的对象**/
      var record:Object =dataProviderCollection.getItemAt(r);
      /**调用回调函数写入sheet**/
      insertRecordInSheet(r+1,sheet,record);
     }
     /**生成Excel文件**/
     var xls:ExcelFile = new ExcelFile();
     /**将sheet写入Excel文件中**/
     xls.sheets.addItem(sheet);
     /**将xls对象转换为ByteArray流对象**/
     var bytes: ByteArray = xls.saveToByteArray();
     /**生成新文件域**/
     var fr:FileReference = new FileReference();
     /**将bytes流对象保存到文件域**/
     fr.save(bytes,excelName+".xls");
     fr.addEventListener(Event.COMPLETE,ExpSuc);
     fr.addEventListener(IOErrorEvent.IO_ERROR,ExpFal);
     /**回调函数**/
     function insertRecordInSheet(row:int,sheet:Sheet,record:Object):void
     {
      
      var colCount:int = dataProviderCollection.length; //当前datadrid 显示的行数
      //var colCount:int = myDg.columnCount; //当前datadrid 显示的行数
      for(var c:int; c < colCount; c++)
      {
       var i:int = 0;
       for each(var field:String in fields)
       {
        for each (var value:String in record)
        {
         /**循环判断myDg列名域值record[field]与value是否相等**/
         var calString:String=record[field]!=null?record[field].toString():"";
         if (calString == value)
          /**写入表格中**/
          sheet.setCell(row,i,String.fromCharCode(127)+value);
        }
        i++;
       }
      }
     }
    }
    private static function ExpSuc(event:Event):void{
     Alert.show("导出Excel成功!","提示信息",4,null,null,success);
    }
    
    private static function ExpFal(event:IOErrorEvent):void{
     Alert.show("导出失败!请关闭打开的Excel或修改导出文件名!","提示信息",4,null,null,fail);
    }
   }
 }
使用方式 传入datagridID 以及excel表名
原创粉丝点击