as3xls导出Excel和解决导出中文乱码问题

 

as3xls导出Excel,解决导出Excel中文乱码问题

<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009"
     xmlns:s="library://ns.adobe.com/flex/spark"
     xmlns:mx="library://ns.adobe.com/flex/mx"
     layout="vertical" width="100%" height="100%"
     creationComplete="initData();">
<fx:Declarations>
   <!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
   <![CDATA[
    import com.as3xls.xls.Cell;
    import com.as3xls.xls.ExcelFile;
    import com.as3xls.xls.Sheet;
   
    import mx.collections.ArrayCollection;
    import mx.collections.XMLListCollection;
    import mx.controls.Alert;
    import mx.controls.dataGridClasses.DataGridColumn;
    import mx.managers.PopUpManager;
   
    private var xls:Class;
    private var sheet:Sheet;
   
    [Bindable]
    private var fields:Array = new Array();
   
    //初始化数据
    private function initData():void{
     var xml:XML=new XML(<data>
          <item name="qiyy" sex="男" age="23" phone="13032135708"/>
          <item name="zhangmm" sex="man" age="23" phone="13032135708"/>
          <item name="yaox" sex="man" age="23" phone="13032135708"/>
          </data>);
     rebateByItemDG.dataProvider=xml.item;
    }
    private function setExportExcel():void{
     //这里要判断是XML格式的还是ArrayCollection格式的
     var arrC:ArrayCollection=new ArrayCollection();
     for each(var x:XML in rebateByItemDG.dataProvider){
      var obj:Object=new Object();
     obj.name=x.@name;
     obj.sex=x.@sex;
     obj.age=x.@age;
     obj.phone=x.@phone;
      arrC.addItem(obj);
     }
     //导出Excel
     exportToExcel(arrC);
    }
    //导出Excel
    private function exportToExcel(arrC:ArrayCollection):void{
     var dataProviderCollection:ArrayCollection=new ArrayCollection();
     dataProviderCollection=arrC;
     sheet = new Sheet();
     var rowCount:int = dataProviderCollection.length;
     sheet.resize(rowCount + 1,rebateByItemDG.columnCount);
     var columns:Array = rebateByItemDG.columns;
     var i:int = 0;
    
     for each (var field:DataGridColumn in columns){
      fields.push(field.dataField.toString());
      sheet.setCell(0,i,columns[i].headerText);
      i++;
     }
    
     for(var r:int=0; r < rowCount; r++)
     {
      var record:Object = dataProviderCollection.getItemAt(r);
      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,sheet:Sheet,record:Object):void{
     var colCount:int = rebateByItemDG.columnCount;
     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){
        //xml数据
        if (record[field.split("@")[1]].toString() == value) {
         sheet.setCell(row,i,value);
        }
       }
       i++;
      }
     }
    }
    //关闭窗体
    private function closewindow():void{
     PopUpManager.removePopUp(this);
    }
   ]]>
</fx:Script>
<s:VGroup>
   <mx:DataGrid id="rebateByItemDG" includeInLayout="true" visible="true" width="100%" editable="true">
    <mx:columns>
     <mx:DataGridColumn headerText="姓名" dataField="@name"/>
     <mx:DataGridColumn headerText="性别" dataField="@sex"/>
     <mx:DataGridColumn headerText="年龄" dataField="@age"/>
     <mx:DataGridColumn headerText="电话" dataField="@phone"/>
    </mx:columns>
   </mx:DataGrid>
   <mx:Button label="Export To Excel" click="setExportExcel();"/>
   <mx:Button label="Close Window" click="closewindow();"/>
</s:VGroup>
      

</mx:Module>

支持中文版的as3xls下载地址:as3xls.swc(CSDN下载要注册的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
as3xls是一个用于ActionScript 3的开源库,用于读取Excel文件。通过as3xls,我们可以解析Excel文件并访问其中的数据。 在使用as3xls读取Excel文件之前,需要下载并导入as3xls库。然后,我们可以按照以下步骤读取Excel文件: 1. 创建FileReference对象,并使用其load()方法加载Excel文件。 2. 通过FileReference对象的Event.COMPLETE事件监听器,在文件加载完成后,获取Excel文件的字节数组。 3. 创建一个ExcelFile对象,并使用其loadFromByteArray()方法加载Excel文件的字节数组。 4. 使用ExcelFile对象的getSheetAt()方法选择要读取的表格。 5. 遍历选定的表格,使用getCell()方法获取每个单元格的数据。 6. 将单元格的数据存储在适当的数据结构中,可以是数组、对象或其他方式。 以下是一个简单的示例代码,演示如何使用as3xls读取Excel文件: ``` import com.as3xls.xls.ExcelFile; import com.as3xls.xls.Sheet; var fileRef:FileReference = new FileReference(); fileRef.addEventListener(Event.SELECT, onSelectFile); fileRef.addEventListener(Event.COMPLETE, onCompleteLoad); function onSelectFile(event:Event):void { fileRef.load(); } function onCompleteLoad(event:Event):void { var fileData:ByteArray = fileRef.data; var excelFile:ExcelFile = new ExcelFile(); excelFile.loadFromByteArray(fileData); var sheet:Sheet = excelFile.getSheetAt(0); // 选择第一个表格 for (var rowIndex:int = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) { for (var colIndex:int = 0; colIndex < sheet.getPhysicalNumberOfCells(); colIndex++) { var cellData:Object = sheet.getCell(rowIndex, colIndex).value; // 将单元格数据存储在适当的数据结构中 } } } ``` 使用上述代码,我们可以读取Excel文件并访问其中的数据。请注意,as3xls库还提供其他辅助方法,可以根据需要进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值