`
上帝的指纹
  • 浏览: 48599 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江
社区版块
存档分类
最新评论

在Excel与Flex之间粘贴数据

    博客分类:
  • Flex
阅读更多
在Excel与Flex之间粘贴数据
试用过Google Spreadsheets的朋友,可能发现其一个有意思的特性,我们可以直接将Excel中的多行数据直接复制插入到Google Spreadsheets中(OpenOffice也可以直接复制过去),没尝试过的朋友可以马上按如下步骤测试下:

在Excel(或OpenOffice Calc)中选择多行数据,敲Ctrl+C键,复制选择的多行数据:



然后到Google Spreadsheets,敲Ctrl+V键,前面复制的单元格就被复制过来了:



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

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

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

在DataGrid中,当按下Ctrl键时,我们创建一个隐藏的文本(TextField)组件,并将焦点定位给它,这样,我们就可以接受任何通过Ctrl+V粘贴过来的数据。相应的我们也将DataGrid选择行数据以TSV格式拷贝到TextField组件中,并且将所有的文本选择,这样我们使用Ctrl+C操作就可以复制当前行所有数据了。
监听隐藏文件组件的textInput事件。如果有任何数据被粘贴的话,那么在这里数据将被解析,并插入到DataGrid中。
当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>
分享到:
评论
2 楼 woodybit 2012-09-21  
很好的方法,不错
1 楼 hero0319 2011-03-23  
fdbdfdfdfgd dfgdgdgd

相关推荐

    flex word 与 excel

    如果文章涉及到Flex与Excel的结合,那么可能是在讲解如何使用Flex创建动态数据仪表板,将Excel数据实时显示在Web应用中。 2. **ActionScript与Word/Excel文件操作**: ActionScript是Flex的主要编程语言,通过AS3...

    flex中dataGrid导出数据到excel中

    flex中dataGrid导出数据到excel中,不存在乱码问题

    flex air 导出 excel

    在Flex Air中,有时我们需要将数据导出为Excel格式,以便用户可以进行离线分析或进一步处理。然而,需要注意的是,Flex Air原生并不直接支持导出包含中文字符的Excel文件,这可能是由于早期版本的Excel文件格式处理...

    flex导出复杂excel

    AdvancedDataGrid导出复杂表头excel

    将flex页面数据导出到excel

    总结来说,将Flex页面数据导出到Excel涉及到客户端与服务器端的交互,服务器端生成Excel文件,以及客户端的下载触发。虽然Flex本身并不直接支持Excel生成,但结合其他技术和库,我们可以提供一个完整的解决方案,...

    AMF抓取flex页面数据

    - AMF是一种高效的数据序列化格式,用于在Flex客户端和服务器之间传输数据。它比XML或JSON更快,因为它以二进制形式传输,减少了网络负载。 - AMF分为两种类型:AMF0和AMF3,其中AMF3提供了更好的压缩和性能。 2....

    flex datagrid 数据保存到excel以及从excel读取数据

    在IT行业中,Flex Datagrid是一种常用的UI组件,用于展示和管理大量数据,它在Adobe Flex或ActionScript 3(AS3)开发环境中广泛使用。这个主题涉及到如何将Flex Datagrid中的数据保存到Excel文件,以及从Excel文件...

    Flex导出excel文件例子

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

    flex与java结合的excel导出

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

    Flex与Servlet之间数据的交互

    Flex与Servlet之间的数据交互是JavaWeb开发中的一个重要环节,它涉及到客户端富互联网应用程序(RIA)与服务器端数据处理的协同工作。Flex作为一个基于Adobe Flash Player的前端开发框架,主要用于创建具有丰富用户...

    flex与PHP数据交互教程

    在Flex与PHP的数据交互中,我们通常涉及到Ajax技术、SOAP或AMF(Action Message Format)协议。 1. **Flex与PHP数据交互的基础** - Flex客户端:使用ActionScript编写,通过HTTP或HTTPS协议向PHP服务器发送请求,...

    flex excel智能比对导入数据功能

    7. **异常处理与日志记录**:在数据导入过程中,可能出现各种异常,如格式错误、字段类型不匹配等。系统需要有完善的异常处理机制,捕获错误并提示用户。同时,日志记录也非常重要,能帮助开发者追踪和调试问题。 8...

    将Flex DataGrid数据导出到Excel中

    在开发基于Adobe Flex的应用程序时,我们经常遇到需要将数据展示在用户友好的方式中,例如使用DataGrid组件。然而,有时用户希望将这些数据显示在更传统的格式中,如Microsoft Excel电子表格。本教程将详细介绍如何...

    flex前台直接导出excel

    使用AS3XLS,开发者可以直接在Flex应用中生成Excel工作簿,添加工作表,填充数据,设置样式等,然后提供一个下载链接让用户直接下载生成的Excel文件。这样就避免了因字符编码不同而导致的乱码问题,因为整个过程都在...

    flex air 导出 excel 支持中文

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

    Flex 导出Excel FlextoExcel

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

    Flex与java交换数据 Flex数据交换 Flex与java交换数据教程

    5. **错误处理**:确保在客户端和服务端都实现适当的错误处理机制,以便在数据交换过程中出现异常时,可以捕获并处理错误。 6. **安全性考虑**:为了保护数据安全,可能需要在传输层启用SSL/TLS,以及对服务进行...

    Flex利用as3xls导入excel数据表

    这篇博文“Flex利用as3xls导入excel数据表”探讨了如何在Adobe Flex项目中读取和导入Excel(.xls)文件的数据,以便在Flex应用程序中进行进一步处理或展示。Flex是一个开源的、基于ActionScript 3的框架,用于构建富...

    FLEX 读取Excel

    在本主题中,我们将探讨如何使用FLEX来读取Excel文件并展示其数据,甚至将其传送到后台数据库进行存储。 首先,要实现FLEX读取Excel文件,我们需要借助第三方库,如As3Xlsx或Zap2It。这些库允许FLEX应用程序解析...

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

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

Global site tag (gtag.js) - Google Analytics