`
wzhelp
  • 浏览: 47482 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

flex 和 excel通讯

阅读更多


在Excel(OpenOffice Calc)中,当多个单元格被复制时,这些单元格的数据是以tab键分隔一行行数据(tab- separated values (TSV))存放在剪贴板中的,当这些数据被粘贴到Google Spreadsheets中时,这些TSV格式的数据被解析并被相应插入到Google Spreadssheets中了。

既然知道其中的奥妙,那么剩下的就是在Flex中实现同样的效果了。以下是我们的实现思路,可以在Excel和Flex相互直接复制粘贴数据。

我们的思路的精妙所在是隐藏文本(TextField)组件的使用:

   1. 在DataGrid中,当按下Ctrl键时,我们创建一个隐藏的文本(TextField)组件,并将焦点定位给它,这样,我们就可以接受任何通过Ctrl+V粘贴过来的数据。相应的我们也将DataGrid选择行数据以TSV格式拷贝到TextField组件中,并且将所有的文本选择,这样我们使用Ctrl+C操作就可以复制当前行所有数据了。
   2. 监听隐藏文件组件的textInput事件。如果有任何数据被粘贴的话,那么在这里数据将被解析,并插入到DataGrid中。
   3. 当Ctrl键释放后,移除隐藏的文本组件。

以下是完整实现示例代码:

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
   <mx:Script>
       <![CDATA[
   import flash.events.KeyboardEvent;

   private function dataGridKeyDownHandler(event:KeyboardEvent):void
   {
     if (event.ctrlKey && !dataGrid.getChildByName("clipboardProxy"))
     {
       // Add an invisible TextField object to the DataGrid
       var textField:TextField = new TextField();
       textField.name = "clipboardProxy";
       dataGrid.addChild(textField);
       textField.visible = false;

       textField.type = TextFieldType.INPUT;
       textField.multiline = true;

       // Populate the TextField with selected data in TSV format

       textField.text = getTextFromItems(dataGrid.selectedItems);
       textField.setSelection(0, textField.text.length - 1);

       // Listen for textInput event

       textField.addEventListener(TextEvent.TEXT_INPUT,
           clipboardProxyPasteHandler);

       // Set player-level focus to the TextField

       systemManager.stage.focus = textField;
     }
   }


   private function dataGridKeyUpHandler(event:KeyboardEvent):void
   {
     if (!event.ctrlKey)
     {
       var textField:TextField = TextField(dataGrid
           .getChildByName("clipboardProxy"));
       if (textField)
         dataGrid.removeChild(textField);
     }
   }

   private function clipboardProxyPasteHandler(event:TextEvent):void
   {
     // Extract values from TSV format and populate the DataGrid

     var items:Array = getItemsFromText(event.text);
     for each (var item:Object in items)
       dataGrid.dataProvider.addItem(item);
   }

   private function getItemsFromText(text:String):Array
   {
     var rows:Array = text.split("\n");
     if (!rows[rows.length - 1])
       rows.pop();

     var columns:Array = dataGrid.columns;
     var itemsFromText:Array = [];

     for each (var rw:String in rows)
     {
       var fields:Array = rw.split("\t");

       var n:int = Math.min(columns.length, fields.length);
       var item:Object = {};
       for (var i:int = 0; i < n; i++)
         item[columns[i].dataField] = fields[i];
       itemsFromText.push(item);
     }

     return itemsFromText; 
   }

   private function getTextFromItems(items:Array):String
   {
     var columns:Array = dataGrid.columns;
     var textFromItems:String = "";

     for each (var it:Object in items)
     {
       for each (var c:DataGridColumn in columns)
         textFromItems += it[c.dataField] + "\t";
       textFromItems += "\n";
     }

     return textFromItems;
   }
   ]]>
   </mx:Script>
  
   <mx:DataGrid id="dataGrid" editable="true"
       keyDown="dataGridKeyDownHandler(event)"
       keyUp="dataGridKeyUpHandler(event)">
       <mx:columns>
           <mx:DataGridColumn headerText="Scheduled Date"
               dataField="scheduledDate" />
           <mx:DataGridColumn headerText="Home Team"
               dataField="homeTeam" />
           <mx:DataGridColumn headerText="Away Team"
               dataField="awayTeam" />
           <mx:DataGridColumn headerText="Field"
               dataField="field" />
       </mx:columns>
       <mx:dataProvider>
           <mx:Object scheduledDate="4/1/2006" homeTeam="Chester Bucks"
               awayTeam="Long Valley Hitters" field="Dawn Field" />
       </mx:dataProvider>
   </mx:DataGrid>
</mx:Application>
分享到:
评论

相关推荐

    Flex 导出Excel FlextoExcel

    Flex利用JSP导出Excel Flex利用JSP导出Excel

    flex word 与 excel

    综上所述,这篇文章可能深入探讨了使用Flex和ActionScript与Word、Excel文件进行交互的各种技术和策略,提供了源码实例,并可能涵盖了一些常用的开发工具和库。对于希望在Web应用中集成Office功能的开发者来说,这样...

    flex导入excel2007版本以上并支持日期格式的类库Rxlsx

    //fr.data为flex加载excel的byte数组 var sheet:Array = excel.getSheetArray();//得到表格数据,为Array格式 var datasource:ArrayCollection = new ArrayCollection(sheet); //可转换为ArrayCollection,用于表格...

    Flex导入Excel文件的应用部分代码

    在Flex开发中,导入Excel文件是一项常见的需求,特别是在数据处理和可视化应用中。Flex是一种基于ActionScript 3.0的开放源代码框架,用于构建富互联网应用程序(RIA)。要实现Flex导入Excel文件的功能,通常会涉及...

    flex导出复杂excel

    AdvancedDataGrid导出复杂表头excel

    FLEX 读取Excel

    而Excel则是微软公司推出的电子表格软件,广泛应用于数据处理、分析和报告。在本主题中,我们将探讨如何使用FLEX来读取Excel文件并展示其数据,甚至将其传送到后台数据库进行存储。 首先,要实现FLEX读取Excel文件...

    Flex读取excel

    对于Flex开发者来说,能够有效地读取和写入Excel文件是一项重要的技能。本文将深入探讨如何使用Flex进行Excel文件的读取与写入操作,并基于提供的代码片段进行详细的分析。 #### 二、基础知识 1. **Flex概述**:...

    flex读取excel文件

    而Excel文件通常用于存储和处理表格数据,因此在Flex中实现Excel文件的读取是常见的需求。 首先,由于FlashPlayer本身并不直接支持读取二进制文件如Excel(.xlsx或.xls),我们需要借助第三方库来完成这个任务。一...

    Flex导出Excel

    这是因为Flex本身并不支持直接创建Excel文件,但它可以生成这些兼容Excel的格式,然后由Excel软件来打开和处理。 1. CSV导出: CSV是一种简单但广泛接受的格式,Excel可以轻松读取。在Flex中,你可以遍历数据并将...

    Flex导出excel文件例子

    在Flex开发中,导出数据到Excel文件是常见的需求,特别是在数据展示和分析场景中。Flex是一种基于ActionScript 3(AS3)的开源框架,主要用于构建富互联网应用程序(RIA)。在本例中,我们将探讨如何使用Flex来导出...

    flex air 导出 excel

    Flex Air 是Adobe开发的一款用于构建桌面应用程序的框架,它基于ActionScript 3.0和Flash Player,使得开发者能够使用熟悉的Flex技术创建桌面应用。在Flex Air中,有时我们需要将数据导出为Excel格式,以便用户可以...

    Flex与java通讯

    Adobe提供了两种主要的技术来实现Flex和Java之间的通信:BlazeDS和LiveCycle Data Services (LCDS)。BlazeDS是免费开源的解决方案,它提供了一套基于AMF(Action Message Format)的数据传输协议,能够高效地在Flex...

    flex前台直接导出excel

    在Flex中,我们可以利用一些库或插件来实现Excel文件的创建和导出。其中一种常见方法是使用AS3XLS或FlexCel这两款库,它们提供了读写Excel文件的功能。 AS3XLS是一个用纯ActionScript编写的库,它可以创建和修改...

    flex导出excel

    标签“excel”和“flex”进一步确认了这个项目与Excel文件操作和Flex编程有关。在Flex中,可以使用像As3Xlsx或As3CoreLib这样的库来创建和处理Excel文件。这些库提供了读取、写入Excel文件的功能,使得在Flex应用中...

    flex 上传excel 导入数据库

    标题 "flex 上传excel 导入数据库" 涉及的技术点主要集中在使用Adobe Flex进行文件上传,特别是Excel文件,并将其数据导入到数据库中。Flex是一种开源的RIA(富因特网应用程序)开发框架,使用MXML和ActionScript...

    flex excel文件导入到出

    flex excel文件导入到出 DataGrid

    flex air 导出 excel 支持中文

    在Flex Air应用中导出Excel并支持中文是一项常见的需求,特别是在数据可视化和报表生成的场景下。Flex Air是Adobe提供的一款基于Flash Player的桌面应用程序开发框架,它允许开发者创建具有丰富用户界面的桌面应用...

    flex导出Excel

    使用as3xls-1.0.1.SWC包做的Flex界面DateGrid数据导出Excel表格。

    flex与java结合的excel导出

    在Flex和Java结合的环境中,实现Excel导出是一项常见的需求,尤其在数据分析和报表生成时。以下是关于这个主题的关键知识点: 1. **Flex与Java的交互**:Flex是一种基于Adobe Flash Player运行时的富互联网应用...

    flex读取excel(含中文字符)的解决

    AS3XLS库提供了丰富的API供开发者使用,通过深入理解和实践,可以更好地解决在Flex中读取和处理Excel文件,特别是包含中文字符的文件的问题。 总结来说,AS3XLS是Flex开发中处理Excel文件的有力工具,尤其在处理...

Global site tag (gtag.js) - Google Analytics