TechNote

事務屋のおぼえがき

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切り替えを行っている。

あわせて読みたい

PHPでMaximum execution time of 60 seconds exceededのエラー - TechNotePHPでMaximum execution time of 60 seconds exceededのエラー - TechNote

Maximum execution time of 60 seconds exceededが出てプログラムが終了する場合はphp.iniにて下記を書き換える。時...

PHP+ACCESSでの文字化けについて - TechNotePHP+ACCESSでの文字化けについて - TechNote

Accessとの入出力は全てShift-JISになる。ほとんどの場合、結果取得やデータ更新時は文字エンコードが必要。テーブルより取得したデータを画面表示する前$...

PHPからAccessデータベースの使用 - TechNotePHPからAccessデータベースの使用 - TechNote

PHPからAccessのデータベース(mdb)を利用するにはODBC経由での接続が必要。ODBCの設定手順1.「コントロールパネル」→「管理ツール」→「データソ...

プログラムで簡単理解! 7つの超重要な整列アルゴリズム(ソートアルゴリズム)まとめ - TechNoteプログラムで簡単理解! 7つの超重要な整列アルゴリズム(ソートアルゴリズム)まとめ - TechNote

基本情報技術者試験や応用情報技術者試験の時期も近まった今、あらためて整列アルゴリズムをまとめてみたので、忘備録を兼ねてメモを残します。即席コードも併せて記載しま...