GeneXusでのエクセルデータの入出力方法
こんにちは、RADサービス部の佐々木です。今回は、GeneXusを使ってエクセルデータの取り込みと出力の方法についてご紹介したいと思います。初めてGeneXusでエクセルデータの読込、出力処理を行う方でも理解出来るように、出来るだけ分かりやすく実装方法を説明していきますので是非参考にしてみてください。
エクセルデータの読み込み
それでは始めに読み込み方法からご紹介します。今回は下記のエクセルファイルをデータベースに読み込むという内容で実装していきます。
読み込みファイルの内容に合わせて対象のトランザクションも下記のように準備します。
ファイルとトランザクションの準備が出来たらプロシージャオブジェクトを作成してソースに記述していきます。まず読み込み対象のファイルをオープンする処理です。下記のようなコードを記述します。パスは読み込み対象のエクセルファイルパスを指定します。ファイルのオープンにはExcelDocumentデータタイプのOpenメソッドを使ってファイルを開きます。
// 読み込むエクセルファイルパスを指定 &FilePath = !"D:\伝票データ.xlsx" // エクセルファイルを開く &Result = &ExcelDocument.Open(&FilePath) Do 'ErrCheck'
この時、読み込みが成功した場合は&Result変数に0が返り、失敗した場合は下記のErrCheckでひっかかり、エラーメッセージが表示され処理を終了します。
Sub 'ErrCheck' If &Result <> 0 Msg(&ExcelDocument.ErrDescription) &ExcelDocument.Close() Return Endif Endsub
ファイルの読み込みに成功したら各セルのデータを1行ずつ読み込んでいきます。最初に読み込み開始位置を指定して、そこから各列毎に読み込んでいき、1行読み込みが完了したら次の行に移動します。これを「伝票No」列のデータが空になるまで行います。処理が完了したらファイルを閉じて終了です。
// セルの読み込み開始位置を指定 &RowNum = 2 &ColNum = 1 // 伝票No列の値が空になるまで読み込む Do while &ExcelDocument.Cells(&RowNum,&ColNum).Text.Trim() <> !"" // 伝票NO If &ExcelDocument.Cells(&RowNum,&ColNum).Type = !"N" &VoucherId = &ExcelDocument.Cells(&RowNum,&ColNum).Number Endif // 伝票日付 If &ExcelDocument.Cells(&RowNum,&ColNum + 1).Type = !"D" &VoucherDate = &ExcelDocument.Cells(&RowNum,&ColNum + 1).Date Endif // 顧客名 If &ExcelDocument.Cells(&RowNum,&ColNum + 2).Type = !"C" &CustomerName = &ExcelDocument.Cells(&RowNum,&ColNum + 2).Text Endif // 合計 If &ExcelDocument.Cells(&RowNum,&ColNum + 3).Type = !"N" &Total = &ExcelDocument.Cells(&RowNum,&ColNum + 3).Number Endif //データ追加 New VoucherId = &VoucherId VoucherDate = &VoucherDate CustomerName = &CustomerName Total = &Total Endnew &RowNum += 1 Enddo // エクセルファイルを閉じる &ExcelDocument.Close() Return
プロシージャを実行して下記のようにデータが正しく登録されているかを確認できたら終了です。
エクセルデータの出力
では、次に出力部分に関する実装方法をご紹介いたします。先ほど読み込み時に取り込んだデータを使って、今度は別の空のエクセルファイルに出力するという内容で行ってみます。新たにプロシージャを作成して、ソースに出力対象のファイルパスを下記のように指定します。読み込み時同様ファイルのオープンに成功したら変数&Resultには0が返ります。
// 出力対象のエクセルファイルパスを指定 &FilePath = !"D:\伝票データ.xlsx" // エクセルファイルを開く &Result = &ExcelDocument.Open(&FilePath) Do 'ErrCheck'
次にヘッダー部分の出力を行い、値がセルに書き込まれたらデータベースから1行ずつデータを取得して出力していきます。下記の内容をソースに記述します。
// セルの初期値を設定 &RowNum = 1 &ColNum = 1 // ヘッダーを出力 &ExcelDocument.Cells(&RowNum,&ColNum).Text = !"伝票NO" &ExcelDocument.Cells(&RowNum,&ColNum + 1).Text = !"伝票日付" &ExcelDocument.Cells(&RowNum,&ColNum + 2).Text = !"顧客名" &ExcelDocument.Cells(&RowNum,&ColNum + 3).Text = !"合計" // データベースからデータの出力 For Each Voucher &RowNum += 1 // 伝票NO &ExcelDocument.Cells(&RowNum,&ColNum).Number = VoucherId // 伝票日付 &ExcelDocument.Cells(&RowNum,&ColNum + 1).Date = VoucherDate // 顧客名 &ExcelDocument.Cells(&RowNum,&ColNum + 2).Text = CustomerName // 合計 &ExcelDocument.Cells(&RowNum,&ColNum + 3).Number = Total Endfor // エクセルファイルの保存 &Result = &ExcelDocument.Save() Do 'ErrCheck' // エクセルファイルを閉じる &Result = &ExcelDocument.Close() Return
出力が完了したらファイルを保存して閉じます。プロシージャを実行して下記の内容が出力されたことを確認できたら終了です。
GeneXusでExcelのデータ管理をもっと簡単に
ここまでExcelデータの入出力の方法についてご紹介しました。ここからは、実際にExcelでのデータ管理を、GeneXusで開発したWebアプリを使って行うとどのように変わるのかを少しご紹介します。例えばExcelで下記のような売上データを管理していた場合、データ数が多くなるとファイル自体の動作が重くなったり、データの検索もしづらくなってしまいますね。
ではこのデータを先ほどご紹介した方法でGeneXusのWebアプリに取り込んでみます。取り込みを行うと下記のようなイメージになります。この時点ですでにデータの更新や削除機能も自動で作成されており、もちろん登録も行えます。
また、検索機能も設計書情報を変更するだけ細かく変更できます。試しに、「店舗名」に「渋谷」と入力し検索行うと、該当するデータが表示されました。
あいまい検索も行えます。
このようにWebアプリでデータ管理を行うとExcelよりも簡単に管理が行えます。また、ユーザーが使いやすいように機能をカスタマイズ出来るのも魅力の一つです。
まとめ
今回は非常に簡単な実装内容でしたが、いかがだったでしょうか。細かいエラー処理については内容が複雑になってしまうため、あえてここではふれずにあくまでも基本的な読み込み処理と出力処理という内容でご紹介しました。今回はエクセルデータに関する入出力の方法でしたが、GeneXusではCSVデータの読込、出力に関しても今回ご紹介した方法と同じような形で実装が可能です。そちらの内容も含めてここではGeneXusを使った様々な実装方法をご紹介していきたいと思います。今回の内容が皆様のお役に立ちましたら幸いです。
↓ExcelからWebアプリに乗り換える利点についての詳しい内容はこちらの記事をご参考に!
▼キャパの公式Twitter・FacebookではITに関する情報を随時更新しています!