エクセルデータ お手軽アップロード(^o^)
登録系のWEB画面からExcelを使ってデータを一括登録したいという要件をよく耳にする。その操作&実装を簡単にするための方法を紹介する。なお、AjaxやOffice機能を使ってもっとエレガントに実装する手段があろうかと思うが、あまり技術に依存しないお手軽な方法としてご理解頂きたい。
Excelデータアップロード方法
通常、下記のような操作を前提とした実装が思い浮かぶ。しかし、この方法ではいちいちファイルの保存場所やありかを指定しなければならず、めんどくさい。
ファイルごとアップロードする方法
この操作をクリップボードを使えば簡単に行うことができる(下記参照)。大した違いが無いように思われるかもしれないが実際やってみると操作性が高いことに気付くはず。
クリップボードを使用しデータのみアップロードする方法
実装方法
Excelシートからweb画面のTEXTAREAにコピペすると、下記の通りタブ区切のリスト文字列になる。
Excelシート上のデータ
ユーザーID 氏名 開始日 備考 tyamada 山田 太郎 2006/04/01 hyamada 山田 花子 2006/04/05 備考です。 SUZUKI Minoru 鈴木 実 2006/04/05 ↓
TEXTエリアに貼り付けた値tyamada → 山田 太郎 → 2006/04/01 → ↓ hyamada → 山田 花子 → 2006/04/05 → 備考です。↓ SUZUKI Minoru → 鈴木 実 → 2006/04/05 → ↓ ※→:TAB(\t)、↓:CRLF(\r\n)
これを利用して、Excel上のデータを単なる文字列としてTEXTAREAにセットし、SUBMITする。コピー&ペーストに関連するコードは以下の通り。実際に業務で使う時には各種チェック処理等を付加する必要がある。
'UserListと名前付した領域の2行目からデータが入力された最後の行までをコピー Sub CopyToClipboard() With Range("UserList") .Cells.Replace what:=Chr(10), replacement:="" ActiveSheet.Range(.Rows(2), .Rows(.Rows.Count).End(xlUp)).Copy End With End SubWEB画面上でのTEXTAREAへの貼り付け
function PasteButton_onclick() { : UploadForm.UploadDataTextBox.createTextRange().execCommand("Paste"); : }