Sunday, 9 June 2013

Excel export from datagrid in flex

The following code is used to export data from datagrid to excel in flex.

Code:
            private function ExportToExcel(FileName:String)
            {
                try
                {
                    var fields:Array = new Array();
                    var sheet:Sheet;
                   
                    fields = [];
                    sheet = new Sheet();
                   
                    var rowCont:int = gridRpt.dataProvider.source.length;
                    var dataprovd:ArrayCollection = new ArrayCollection(gridRpt.dataProvider.source);
                   
                    sheet.resize(rowCont + 9,gridRpt.columnCount);
                   
                    var Col:Array = gridRpt.columns;
                    var Ex:int = 0;
                    var ExStr:String = TopPanel.title.toString();
                    var CurrentDateTime:Date = new Date();
                    var CurrentDF:DateFormatter = new DateFormatter();
                    CurrentDF.formatString = "LL:NN:SS A"
                    var DateTimeString:String = CurrentDF.format(CurrentDateTime);
                    sheet.setCell(0,0,"ABIS~PRO");
                    sheet.setCell(2,6,ExStr);
                    sheet.setCell(0,12,"Date :");
                    sheet.setCell(0,13,Perd.text);
                    sheet.setCell(1,12,"Time :");
                    sheet.setCell(1,13,DateTimeString);

                        for each(var DGField:DataGridColumn in Col)
                        {
                            fields.push(DGField.dataField.toString());
                            sheet.setCell(8,Ex,DGField.headerText.toString());
                            Ex++;
                        }

                        for(var r:int = 0;r< rowCont;r++)
                        {
                            var Rec:Object = dataprovd.getItemAt(r);
                            var Erow:int = r+1;
                            //insertRecordInSheet(Erow,sheet,Rec);
                            //var ColCount:int = ColsArr.length;
                            var Exc:int = 0;
                            for(var c:int = 0; c<fields.length; c++)
                            {
                                var ExFld:String =fields[c];
                                if(Rec[ExFld] != null)
                                {   
                                    sheet.setCell(Erow+8,Exc,Rec[ExFld].toString());
                                }
                                Exc++;
                            }                   
                        }

                    var Exls:ExcelFile = new ExcelFile();
                    Exls.sheets.addItem(sheet);
                    var Byt:ByteArray = Exls.saveToByteArray();
                    var FileRef:FileReference = new FileReference();
                    FileRef.addEventListener(Event.SELECT,alert);
                    var ExcStr:String = FileName;
                    FileRef.save(Byt,ExcStr);
                }
                catch(ex:Error)
                {
                    Alert.show(ex.toString());
                }
                finally{}
            }