AdobeFlex3のDataGridからデータをコピーする方法

そういえば、SSLってなんの略だったかと思い、wikipediaから検索したところ、最上位に「湘南新宿ライン」が表示されていました。
そうだね、あれもSSLだね。

どうも、エンジニアアイカワです。

今回は、Adobe FlexDataGridについてです。
DataGridは、データ一覧を表示するコントロールです。
その他、表示されたデータを修正する等の多種機能を持っており、それらはプロパティ一つで設定することができます。

ただし、データのコピーができません。
見た目がExcelに似ているため、選択したデータをそのままコピーできればとよく思います。

ということで、データのコピーが可能なDataGridを作成しました。

DataGridのデモ

デモはこちら。

http://www.risewill.co.jp/lab/blog-demo/flex/20150227/01/
データのコピーは、以下の手順で行います。

1.コピーするデータを選択する。
2.「Shift」キー+「C」キーを押す。
3.Excelなどに貼り付ける。

サンプルソース

以下がソースです。


// (1) キーイベントを取得する
this.DataGrid01.addEventListener(KeyboardEvent.KEY_DOWN,keydownDataGrid01);
[/actionscript3]
[actionscript3]
// (2) キーの判定を行う
function keydownDataGrid01(e:KeyboardEvent):void {
if (e.keyCode == 67 && e.shiftKey) {
this.DataCopy();
}
}
[/actionscript3]
[actionscript3][/actionscript3]
// データのコピー
function DataCopy():void{
// (3) 選択したデータを取得する
var data_array:Array = this.DataGrid01.selectedItems;
data_array.sortOn("No");

if (data_array.length > 0){
// (4) Excel用にデータを加工する
var string_data:String = "";
for ( var i:int = 0 ; data_array.length > i ; i++ ){
string_data += data_array[i].column1 + "\t";
string_data += data_array[i].column2 + "\t";
string_data += data_array[i].column3 + "\t";
string_data += data_array[i].column4 + "\t";
string_data += data_array[i].column5 + "\t";
string_data += data_array[i].column6;
string_data += "\n";
}

// (5) クリップボードに格納する
System.setClipboard(string_data);
}
}
処理の詳細は、以下の通りです。

(1) キーイベントを取得する DataGrid01にKEY_DOWNイベントのリスナーを登録して、コピーをするためのキーイベントを取得します。

(2) キーの判定を行う 今回は「Shift」キー+「C」キーとしました。
「Shift」キー+「C」キーとした理由は、下を参照してください。

(3) 選択したデータを取得する 選択したデータは、DataGridオブジェクトのselectedItemsプロパティで取得できます。
※ただし、取得した配列は選択した順に格納されているため、表示されているものと順序が異なります。
今回は表示されている順序(見た目通りの順番)と合わせるため、選択したデータを取得後にNo列でソートしています。

(4) Excel用にデータを加工する Excelに貼り付けるために、各値をタブ文字で区切ります。
各列の値を抽出し、タブ区切りした文字列を作成します。

(5) クリップボードに格納する クリップボードに格納する際は、以下のメソッドを使用します。
文字列を渡してあげればOKです。
System.setClipboard()

問題点

これで、コピーができるのですが、問題点も多々あります。

・キーイベントが「Ctrl」キー+「C」キーではないのは、なぜ? 「Ctrl」キー+「C」キーでは、キーイベントが発行されないようです。
使用しているWebブラウザで、ショートカットキーが設定されている場合は、そちらが優先されキーイベントが発生しないようです。

・「Shift」キーにも問題あり? 「Shift」キー+文字キーなどを入力すると、その文字で始まる行にフォーカスが移動します。
今回のサンプルは先頭がすべて数字ですので、この問題は発生しませんが、データによってはこの動作が行われる可能性があります。

もしコピーを行う場合は、無難にボタンから実行する方がわかりやすいかもしれません。
株式会社ライズウィル

株式会社ライズウィル

〒103-0013
東京都中央区日本橋人形町2-15-1
フジタ人形町ビル7F
TEL : 03-4590-3200
FAX : 03-4590-3201
E-Mail : info@risewill.co.jp
URL : https://www.risewill.co.jp