Excelブックのダウンロードとアップロードの方法
はじめに)
 Xcuteでは、DBをExcelに書き出し(WriteReport)たり、逆に、Excelを読み込み(ReadReprt)DBを更新することもできます。これらの機能に対応し、WriteReportしたExcelブックをダウンロードしたり、ExcelブックをアップロードしてDBを更新することもできます。
 実際には、これらの方法は3つあります。
基本的なダウンロードとアップロードは、R2C7セルにDawnLoadあるいはUpLoadを指定する方法で、1シート/1ブックで行います。
R2C7セルにWriteTMP|DawnLoadとすると、テンプレート全体がダウンロードされ複数シートを1ブックでダウンロードできます。
上記2つに方法の他に、マクロ(VBA)を使ってExcelとCSVのダウンロードやアップロードを行わせることも可能です。
1) ダウンロードとアップロードの基本
1.1) 1シート/1ブックのダウンロード
メニューの「1シート/1ブック」のダウンロードのリンクをクリックすると、WriteReport=DownLoad1となりこのひな型シートのR2C7セルにDownLoadが指定され、ダウンロードとなります。
1.2) 1シート/1ブックのアップロード
 前記のダウンロードシートのデータを変更して保存する。
メニューの「1シート/1ブック」のダウンロードのリンクをクリックすると、WriteSheet=Up1となり、下記のアップロードのひな型シートが使われます。
 この結果、下記のアップロードのファイル選択画面が表示されます。
 ファイルを指定し、「アップロード開始」をクリックすると、ReadReport=UpLoad1が発行され下記ひな型が呼び出されアップロードされます。
 最終的には、下記のアップロード結果が表示されます。
2) WriteTMPを使ったダウンロード
メニューの「ブック全体のダウンロード(2シート/1ブック)」のリンクをクリックすると、WriteReport=WriteTMPが発行され、下記の画面が表示されます。
ダウンロードして、Excelで開くと、下記のように、CodeとWriteTMPの2つのシートが含まれるブックであることがわかります。
WriteTMPを使ったダウンロードでは、CodeとWriteTMPのつのシートを含むひな型ブック(WriteTMP.xls)を用意し、WriteTMPシートのR2C7セルに「WriteTmp|NoCopy|DownLoad」と指定します。
WriteTMPは、テンプレート(ひな型)へ書き込めの意味で、NoCopyとはひな型のCopyは不要の意味です。
3) Excelのダウンロードとアップロードをマクロで実現
3.1) 2シート/1ブックのダウンロード
メニューのマクロを使うの「2シート/1ブック」のダウンロードのリンクをクリックすると、WriteReport=DownLoad2が発行され、下記ダウンロードの画面が表示されます。
ダウンロードしてExcelで開くと、男性のレコード6件と女性のレコード2件の2シートで構成されるブックが開く。
*マクロでの実現方法の概略
1)RunA=UpDownLoad.xls!DownLoad2でWeiteReport後にDwonLoad2が呼ばれる
 マクロDownLoad2は、R3C8セルにコマンド連鎖のコマンドを設定する。
2)同じように、2回目のWeiteReport後にDwonLoad2が呼ばれる
3)PleaseDownシートで、RunB=UpDownLoad.xls!PleaseDownが呼ばれる
 マクロPleaseDownは、WriteReportで作成した2つのシートをコピーして1ブックにまとめてファイル名を付けprocgi/tempへ保存し、このシートでダウンロードさせる。
注意: マクロを理解するには、BreakPointを設定し、下記のように設定して1ステップずつ実行すると何が起きているのかすぐ解ります。
上記マクロでの2シート1ブックのダウンロードは、2シートWriteReportしそれらを1ブックにまとめてprocgi/tempフォルダーへ保存し、そのブックをダウンロード画面で指定しダウンロードさせる仕組みです。
なお、tempフォルダーのダウンロードファイルは、下記のようにdownload.exeでダウンロードされ盗み見されるなどのセキュリティもたもたれます。
3.2) 2シート/1ブックのアップロード
メニューのマクロを使うの「2シート/1ブック」のアップロードのリンクをクリックすると、WriteSheet=Up2が発行され、下記のひな型シートが使われます。
上記ひな型シートで、下記画面がブラウザに表示されます。
「アップロード開始」ボタンに設定されたReadReport=UpLoad2が実行され、結果として、下記のアップロード画面が表示されます。
*マクロでの実現方法の概略
1)RunA=UpDownLoad.xls!UpLoad2でReadReport後にUPLoad2が呼ばれる
 マクロUpLoad2は、R1C6セルに記述されたアップロードブック名をprocgi8/profiles/フォルダーからExcelに開き、シート1を開ける。
 マクロでアップロードブックのシート1のレコード一覧を、現在のワークシートにコピーする。
データの準備ができたので、後はXcuteにReadReportさせる。
 上記をアップロードブックのシート分繰り返す。
実際のUpload2マクロ)
 ReadReport=UpLoad2とし、読み取りデータはRunB(BはBeforeで読み取り前に実行する)で用意しています。具体的には、UpLoadしたブックのSheet1のデータをコピーペーストしています。
4) CSVのダウンロードとアップロードを実現
4.1) CSVのダウンロード
R2C7に「ExcelOpen=S,CSV」と指定すると、印刷範囲の中がCVS変換されます。
4.2) CSVのアップロード(マクロ
3.2)同様CSVファイルを指定し、アップロードして結果画面を得る。
実際には、下記のCSVUpマクロで実現
終わりに)
3)のマクロを使って自力でDownLoadやUpLoadを行う方法は、強力です。
3)の延長で、4)のCSVのUpLoadなども作れます。
DownLoadやUpLoadと似ている機能で後発のExcelOpenがあります。こちらは、自力でtempフォルダーへExcelブックを保存したりできないので、各シートの先頭行を削除するような処理はできません。
今回はマクロを使って、1ブックに複数シートをWriteReportした。この機能はマクロを使用せずともXcuteに用意され、「ひな型の設定」で「親テーブルの1データ毎に改シート」を設定し、親子テーブルで実現できます。具体的には、親テーブルは男と女の2行とし、子テーブルは普通にmeiboとし男女フィールドでリンクすればよい。
以上