flex 通过as3xls包来实现datagrid输出保存到excel。并处理中文乱码

这篇博客介绍了如何在Flex中解决datagrid导出到Excel时的中文乱码问题。作者通过引入as3xls库的1.0.1版本,创建并填充Sheet对象,然后保存为Excel文件,成功实现了带有中文数据的datagrid无乱码导出。

最近一直被flex的dg保存到xls文件困扰,今天终于解决了。

首先看一下代码:

/* 输出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,i,value);
      }
      i++;
     }
    }
   }
  注意的是:一定要把as3xls-1.0.1.swc包导入。它可以用来建立xls文件,并写入信息。as3xls-1.0.swc也可以实现建立xls文件,并写入信息,但是它输出的中文是乱码的,而as3xls-1.0.1.swc可以处理中文乱码。这样就可以实现了dg->xls并且无乱码转存了。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值