2012-07-15 71 views
0

我在這裏只找到了下面的代碼我在我的Adobe Flex項目中保持不變,但在單擊導出到Excel按鈕後,我看不到任何Excel打開,除此之外我的數據網格正在填充與我打算給我的Excel的列名稱。導出爲ex​​cel datagrid adobe flex3

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); 
     } 
    } 
+2

這個問題令人困惑。你在哪裏找到這個代碼?你寫了嗎?它是否在你正在維護的項目中?你有沒有在網上找到它?您的導出按鈕在哪裏?你通過代碼?你是否收到錯誤?用什麼庫來完成這項工作? ExcelFile和Sheet類是什麼?你的DataGrid代碼在哪裏?由於這個方法看起來像一個結果處理程序,這是什麼結果呢?我懷疑你的dataGrid改變是因爲這一行:dataGridResult.dataProvider = arrExportResult;它修改基於列表的類上的dataProvider。 – JeffryHouser 2012-07-15 18:56:19

回答

0

獲得字節數組後,您必須使用FileReference.save(bytes);調用彈出窗口提示用戶保存數據的位置......因爲Flextras/Jeffry表示數據網格可能由於dataGridResult.dataProvider行而改變。如果您將其作爲基於AIR的桌面應用程序執行此操作,則可以使用File和FileStream類直接寫出字節而不提示用戶。

只要你有FP 10+針對性

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html#save()

對於AIR:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/com/adobe/livecycle/content/File.html

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/filesystem/FileStream.html#writeBytes()

+1

在瀏覽器中...我以爲除非用戶請求它(如點擊按鈕),否則不能保存內容。在結果處理程序中沒有辦法觸發它。 – JeffryHouser 2012-07-16 02:55:12

+0

啊你是正確的,這需要通過點擊或鍵盤按下來調用 – shaunhusain 2012-07-16 02:56:19