【问题标题】:Flex export arraycollection to csv/excelFlex 将数组集合导出到 csv/excel
【发布时间】:2026-01-04 18:10:01
【问题描述】:

我有三个高级数据网格,我需要将其数据导出到 Excel。我已将网格的数据合并到一个数组集合中。

现在我需要将该数组集合导出为 csv 或 excel 格式 (.xlsx)。我找到的示例都是将数据网格导出到 excel/csv。我需要知道如何将 arraycollection 导出到 csv。

请帮助。

【问题讨论】:

    标签: apache-flex export-to-csv arraycollection


    【解决方案1】:

    由于 CSV 格式很简单,您只需遍历数组元素并将文件创建为字符串。

    这是示例代码的一部分

        public function exportToCSVStr(data:Array,headersList:Array=null,headerExclude:Array=null):String{
                var result:String = "";
                for each(var line:String in this.exportToCSV(data,headersList,headerExclude)){
                    result+=line;
                }   
                return result;  
            }
    
    
    public  function  exportToCSV(data:Array,headersList:Array,headerExclude:Array):Array{
                if(headerExclude==null)headerExclude=[];
    
                var hedersToExclude:ArrayCollection = new  ArrayCollection(headerExclude);
                var result:ArrayList = new ArrayList();
                var headers:String = "";
                var hList:ArrayList = new ArrayList();
                var i:int=0;
    
                if(headersList==null){
                    for(var h1:String in data[0]){
                        if(hedersToExclude.contains(h1))
                            continue;
                        if(i!=0){
                            headers+=",";
                        }
                        headers+=h1;
                        hList.addItem(h1);
                        i++;
                    }
                }else{
                    for each(var h2:* in headersList){
                        if(i!=0){
                            headers+=",";
                        }
                        headers+=h2["label"];
                        hList.addItem(h2["attr"]);
                        i++;
                    }
                }
                headers+=newLineDelim;
                result.addItem(headers);
    
    
                for each(var item:* in data){
                    var itemStr:String="";
                    i=0;
                    for each(var attr:String in hList.toArray()){
                        if(i!=0){
                            itemStr+=",";
                        }
                        itemStr+=toCSVString(item[attr]);
                        i++;
                    }
                    itemStr+=newLineDelim;
                    result.addItem(itemStr);
                }
    
                return result.toArray();
            }   
    
    protected  function toCSVString(data:*):String{
                if(data==null) 
                    return "";
                if(data is Date){
                    return  strDelim + dateFormatter.format(data) + strDelim;
                } else if(data is String){
                    return  strDelim + data + strDelim;
                } else if(data is Number) {
                    return   numberFormatter.format(data);
                }else {
                    return data;
                }
            }
    

    然后你可以创建文件

    var fr:FileReference = new FileReference();
        fr.save(csvUtil.exportToCSVStr(alist.toArray(),getCsvIncludeHeaders()),getFileNameTitle());
    

    大卫

    【讨论】: