2009-11-02 6 views
8

Wie exportiere ich Daten in meinem Datagrid in eine Excel Datei in Flex?Wie exportiert man ein Datagrid in eine Excel-Datei in Flex?

Kann jemand einige Beispiele dafür zur Verfügung stellen? Ich stöbere, konnte aber kein einziges Beispiel dieser Art finden.

EDIT

viel durchstöbert und fand heraus, wie Datagrid-Daten im CSV-Format zu konvertieren. Wie konvertiert man das zu Excel? Gibt es eine Möglichkeit, dies zu tun, ohne ein Server-Skript zu verwenden? Kann das nicht allein mit Flex gemacht werden?

+0

Was ist Ihre serverseitige Technologie? –

+0

mit Java-Servlets in Eclipse – Angeline

Antwort

1

Excel liest die Tabelle HTML als eine Art Tabelle. Lesen Sie das Gitter Zeile für Zeile, Spalte für Spalte und erzeugen Sie eine Reihe von HTML-Tabellenzellen und erzeugen Sie eine Datei mit dem Namen whatever.xls.

+0

Ich habe es in Form von HTML-Tabellen erstellt. Wie erstelle ich eine Excel-Datei? – Angeline

1

Wenn Sie ein Java-Servlet-Back-End haben, können Sie ein Servlet verwenden, um die Datei auszugeben.

Meine einzige Flex-only Idee war, die CSV Daten in ein Popup mit einem Textbereich auszugeben, der vom Benutzer in eine Datei kopiert und eingefügt werden konnte.

3

Es gibt as3xls für Sie bis write xls file. Es unterstützt nur ein einzelnes Blatt (aber ich denke, das ist in Ordnung).

Aber ich denke, mit csv oder HTML, wie von @susichan und @Rafal angegeben Ziolkowski wird einfacher sein, wenn Sie keine Excel-Funktionen (wie Zellformel) benötigen.

Oh, und es gibt csvlib zum Schreiben von CSV. Für HTML ist es gut, wenn man XML schreibt.

0

as3xls fein zu lesen scheint aber das Schreiben von Excel-Dateien ist eine andere Geschichte. Es kann keine Multisheet-Arbeitsmappen schreiben, es [kann die meiste Zeit] seine eigenen Dateien nicht lesen, und wenn Excel lesen kann, was as3xls ausspuckt, müssen Sie mehrere Speicherungen durchführen, um den ganzen Müll rauszubekommen. Ein echter Mist. Ich arbeite an der Verwendung von NativeProcess von AIR 2.0, um ein Python-Skript aufzurufen, um das Schreiben auszuführen, und ich denke, ich muss das Datagrid/ArrayCollection zuerst in CSV exportieren ... scheint ein langer Weg zu sein. Ich kann nicht glauben, dass es keine bessere ActionScript-Option für das Misten mit Excel gibt. Ist es wirklich eine so seltene Aufgabe?

1

ersten Download SWC-Datei aus dem folgenden Link

Link

Jetzt müssen Sie wenig Arbeit tun, kopieren Sie einfach, dass Code und entsprechend Spaltennamen geben.

public function roExport_export_Result(e:ResultEvent):void 
     { 
      if(e.result.length != 0) 
      { 
       btnExportToExcel.enabled = true; 

       var arrExportResult:Array = e.result as Array; 

       xlsFile = new ExcelFile(); 
       var sheet:Sheet = new Sheet(); 

       sheet.resize(arrExportResult.length+1,14); 

       sheet.setCell(0,0,'Id'); 
       sheet.setCell(0,1,'Full Name'); 
       sheet.setCell(0,2,'Gender'); 
       sheet.setCell(0,3,'Birth Date'); 
       sheet.setCell(0,4,'College Name'); 
       sheet.setCell(0,5,'Qualification'); 
       sheet.setCell(0,6,'Email Id'); 
       sheet.setCell(0,7,'Mobile'); 
       sheet.setCell(0,8,'Position Applied For'); 
       sheet.setCell(0,9,'Technology Interested'); 
       sheet.setCell(0,10,'User Name'); 
       sheet.setCell(0,11,'Password'); 
       sheet.setCell(0,12,'Exam Date'); 
       sheet.setCell(0,13,'Percentage'); 
       sheet.setCell(0,14,'IsActive'); 

       for(var i:int=0;i<arrExportResult.length;i++) 
       { 
        sheet.setCell(i+1, 0, arrExportResult[i].Id); 
        sheet.setCell(i+1, 1, arrExportResult[i].FullName); 
        if(arrExportResult[i].Gender == 1) 
        { 
         arrExportResult[i].Gender = "Male" 
        } 
        else 
        { 
         arrExportResult[i].Gender = "Female"; 
        } 
        sheet.setCell(i+1, 2, arrExportResult[i].Gender); 
        var date:String = arrExportResult[i].BirthDate.date.toString(); 
        var month:String = (arrExportResult[i].BirthDate.month + 1).toString(); 
        var year:String = arrExportResult[i].BirthDate.fullYear.toString(); 
        var bDate:String = date + "/" + month + "/" + year; 
        arrExportResult[i].BirthDate = bDate; 
        sheet.setCell(i+1, 3, arrExportResult[i].BirthDate); 
        sheet.setCell(i+1, 4, arrExportResult[i].CollegeId); 
        sheet.setCell(i+1, 5, arrExportResult[i].QualificationId); 
        sheet.setCell(i+1, 6, arrExportResult[i].EmailId); 
        sheet.setCell(i+1, 7, arrExportResult[i].Mobile); 
        sheet.setCell(i+1, 8, arrExportResult[i].PositionName); 
        sheet.setCell(i+1, 9, arrExportResult[i].TechForTraining); 
        sheet.setCell(i+1, 10, arrExportResult[i].UserName); 
        sheet.setCell(i+1, 11, arrExportResult[i].Password); 
        var date:String = arrExportResult[i].CreatedDate.date.toString(); 
        var month:String = (arrExportResult[i].CreatedDate.month + 1).toString(); 
        var year:String = arrExportResult[i].CreatedDate.fullYear.toString(); 
        var hour:String = arrExportResult[i].CreatedDate.hours.toString(); 
        var min:String = arrExportResult[i].CreatedDate.minutes.toString(); 
        var sec:String = arrExportResult[i].CreatedDate.seconds.toString(); 
        var cDate:String = date + "/" + month + "/" + year + " " + hour + ":" + min + ":" + sec; 
        arrExportResult[i].CreatedDate = cDate; 
        sheet.setCell(i+1, 12, arrExportResult[i].CreatedDate); 
        sheet.setCell(i+1, 13, arrExportResult[i].Percentage); 
        sheet.setCell(i+1, 14, arrExportResult[i].IsActive); 
       } 

       dataGridResult.dataProvider = arrExportResult; 

       xlsFile.sheets.addItem(sheet);  
       bytes = xlsFile.saveToByteArray();     
      } 
      else 
      { 
       arrExportResult = new Array(); 
       dataGridResult.dataProvider = arrExportResult; 
       btnExportToExcel.enabled = false; 
       xlsFile = new ExcelFile(); 
       var sheet:Sheet = new Sheet(); 
       Alert.show("No Records Found",parentApplication.alertTitle); 
      } 
     }