エクセルデータ お手軽アップロード(^o^)

登録系のWEB画面からExcelを使ってデータを一括登録したいという要件をよく耳にする。その操作&実装を簡単にするための方法を紹介する。なお、AjaxやOffice機能を使ってもっとエレガントに実装する手段があろうかと思うが、あまり技術に依存しないお手軽な方法としてご理解頂きたい。

Excelデータアップロード方法

通常、下記のような操作を前提とした実装が思い浮かぶ。しかし、この方法ではいちいちファイルの保存場所やありかを指定しなければならず、めんどくさい。

ファイルごとアップロードする方法

  1. Excelでデータ入力。
  2. xlsまたはcsvでファイル保存。(保管場所&ファイル名設定要)
  3. WEB画面上でファイル選択。(保管場所&ファイル選択要)
  4. 送信ボタン押下。

この操作をクリップボードを使えば簡単に行うことができる(下記参照)。大した違いが無いように思われるかもしれないが実際やってみると操作性が高いことに気付くはず。

クリップボードを使用しデータのみアップロードする方法

  1. Excelでデータ入力。
  2. Excelシート上のクリップボードにコピーボタンを押す。
  3. WEB画面上のクリップボードから貼り付けボタンを押す。

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する。コピー&ペーストに関連するコードは以下の通り。実際に業務で使う時には各種チェック処理等を付加する必要がある。

ExcelシートをコピーするVBAマクロ

'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 Sub

WEB画面上でのTEXTAREAへの貼り付け

function PasteButton_onclick() {
		:
	UploadForm.UploadDataTextBox.createTextRange().execCommand("Paste");
		:
}

その他

  • デモは、asp.netで実装しているが、サーバサイドはなんでもOK。
  • 上記の貼り付け処理はIE限定かも。