Webアプリ+VBScript でWebアプリの操作感をネイティブに近づける

社内業務システムなどでは、データをExcelへ出力する機能が高確率で要求される。
この業務システムをWebアプリとして開発する場合は、できるだけデスクトップアプリの動きに近づける工夫が必要である。

今回、Excel出力処理にこれまで触れたことのなかったVBScriptを補助的に使用し、操作感をデスクトップアプリに近づけることができたのでメモ。

修正前

これまで「Excel出力」機能は、サーバ上に生成したExcelファイルを「ダウンロードさせる」と割り切って以下のような簡単な処理で対応していた。(そこまでヘビーに使われる機能でもなかったため)

  $filePath = '/output/test.xls'; // ファイルパス
$fileName = 'test.xls';          // ファイル名
header('Content-Type: ');
header('Content-Length: '.filesize($filePath));
header('Content-Disposition: attachment; filename="'.$fileName.'"');
echo file_get_contents($filePath);
exit;

が、今回Excel出力を頻繁に使用するものを作る機会に遭遇したことと、もともと「ダウンロード」じゃ不満を感じていたのでVBScriptで実装してみた。結果、デスクトップアプリlikeな動きを実現できたので今後も多用しそう。
(実際は下記に加え、ファイルリネーム、存在チェック、ファイル削除などが必要だけど要点のみ記載)

scriptタグ内に下記を記述

Function getFiletoCliant()
 '端末名取得
Set objNetWork = CreateObject("WScript.Network")
getComputerName = objNetWork.ComputerName
Set objNetWork = Nothing
 'サーバ上のファイルをクライアントへコピー
path0="\\srvname\d\output\templete.xls"
path1="\\" & getComputerName & "\C$\Users\test\output\"
Set fso = CreateObject("Scripting.FileSystemObject")
Call fso.CopyFile(path0,path1,True)
 'ファイルオープン・最前面表示
Set ExlApp = CreateObject("Excel.Application")
ExlApp.Visible = True
ExlApp.Workbooks.Open (path1 & "\templete.xls")
ExlApp.WindowState=-4143
 'CreateObject("WScript.Shell").AppActivate ExlApp.Caption
CreateObject("WScript.Shell").SendKeys "%({TAB})"
Set ExlApp = nothing
End Function

ファイルオープン後、Excelを最前面に表示させることがどうしてもできなかったため、苦し紛れにSendKeysによるAlt+Tab切り替えを行っている。

タイトルとURLをコピーしました