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


20150227

そういえば、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);
// (2) キーの判定を行う
function keydownDataGrid01(e:KeyboardEvent):void {
	if (e.keyCode == 67 && e.shiftKey) {
		this.DataCopy();
	}
}
// データのコピー
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」キー+文字キーなどを入力すると、その文字で始まる行にフォーカスが移動します。
今回のサンプルは先頭がすべて数字ですので、この問題は発生しませんが、データによってはこの動作が行われる可能性があります。


もしコピーを行う場合は、無難にボタンから実行する方がわかりやすいかもしれません。

株式会社ライズウィル

株式会社ライズウィル

〒110-0016
東京都台東区台東1-27-11 やわらぎビル2F
TEL : 03-4590-3200
FAX : 03-4590-3201
E-Mail : info@risewill.co.jp
URL : http://www.risewill.co.jp

海上コンテナ輸送管理システム「海コン魂!」
海コン魂!
面接予約・スタッフ管理システム「WebWORKS.」
WebWORKS.