Windows Script Host (MSH)


 
WScript EXCEL
 

 Windows の GUI 環境の中でアプリケーションの連携をしたい。こんな目的でWSHに挑戦してみる。具体的なアプリケーションはEXCEL。

var ExcelSheet; ExcelApp = new ActiveXObject("Excel.Application"); ExcelSheet = new ActiveXObject("Excel.Sheet"); ExcelSheet.Application.Visible = true; ExcelSheet.ActiveSheet.Cells(1,1).Value = "ここは、A1"; ExcelSheet.SaveAs("C:\\Excel-Test.XLS"); ExcelSheet = "";
 とりあえず、上を「メモ帳」にコピーして、適当な名前で保存する。拡張子はJS にする必要がある。
 上のコードでは、CドライブのルートにExcel-Test.XLSというファイルを保存する。 不都合があれば、例えばC:¥¥temp¥¥Test.XLSのように適宜変更する。ほんとうは、¥¥でなくて¥なのだが” ”の中では¥は特殊な意味になるので¥¥とする。これはルールです。他に疑問があれば解決しましょう。納得できないことはしてはいけません。

 さて、ダブルクリックします。Cells(1,1)に「ここは、A1」と記入されたExcelが開き ました。僕はEXCEL97を使っています。

 どうして、ダブルクリックでExcelが開いたのでしょう。

 Windows98から導入されたWindows Script Hostの仕組みがあったからです。実体はC:\WINDOWSにあるwscript.exeです。「メモ帳」で作ったファイルの拡張子がJSだったのでwscript.exeに渡され、C:\WINDOWS\SYSTEMのwshom.ocx、jscript.dllを利用してスクリプトが実行されました。

スクリプトの内容

 スクリプト自体はJScriptリファレンスのActiveXObjectのページに記載されているものです。原本で確認して下さい。

1行目、変数ExcelSheetの宣言
2行目、Application オブジェクトとしてExcel生成
3行目、Sheet オブジェクトをExcelSheetに割り当てる
4行目、Application オブジェクトを使って Excel を表示
5行目、シートの先頭のセルに文字を入力
6行目、ファイルを保存
7行目、Application オブジェクトの Quit メソッドで Excel を終了
8行目、オブジェクト変数を解放

 でも、このままでは一瞬Excel が開いたようですが、閉じてしまいました。 スクリプトは作業が終れば、すべてを終了させるようです。6行と7行の間に
WScript.Echo("OK?");
として確認できるようにしました。

ActiveXObject

 Excel97はActiveXObject対応です。Windows98でMicrosoftは従来のOLEコントロールをインターネット対応のActiveXコントロールとしました。
 WindowsOSは アプリケーションに対して基本機能をAPIとして提供する構造です。それと引換えに、アプリケーションは直接ハードウエアにアクセスしないのがルールです。この構造は、アプリケーションが共通部品から構成されている事を意味し、アプリケーション間の連携が容易なことは想像できます。
 Windows 95のリリースを成功させると即刻、Microsoftはインターネットを戦略の前面に掲げ Windows 98でOLEをActiveXコントロール (コンポーネント) に模様変えしました。インターネットのブラウザは当然ActiveXコントロールから組みたてられています。
 クリップボード経由のアプリケーション間の文書貼り付け、図形貼り付けといったデータ連携は、ActiveXコントロールで外部から直接アプリケーションをコントロールできることになった訳です。
 ActiveXコントロールの本質はCOM(Componet Object Model)と呼ばれるアプリケーション間通信です。Windows Script Host は、その過程でEXCELをCOM化します。自分自身もCOM対応です。だからコントロールが出来るのです。ActiveXObject ( "Excel.Application" ) これがCOM化の手続きでした。
  • Word.Application
  • InternetExplorer.application
  • Scripting.FileSystemObject
  • WScript.Shell
 JScriptはInternetExplorerをコントロールできます。ActiveXObjectを作り、MicrosoftOfficeアプリケーション群をインターネットツール群に加えます。さらに、ファイル入出力が利用できます。WScript.ObjectとしてWindowsOSのShellが加わります。結局、JScriptでシームレスにPCをコントロールできることになります。

EXCELのダイアログボックス

 ActiveXコントロール部品を利用するには、スクリプトに名前とタイプを書く必要があります。Excel97にはVisual Basic for Applications(VBA)が搭載されています。このVBAにオブジェクトブラウザがあります。利用したい部品情報が得られます。
Microsoft Excel 8.0 Object Library(EXCEL8.OLB)
    Excel.Application のメンバ
Function GetOpenFilename
([FileFilter], [FilterIndex], [Title], [ButtonText], [MultiSelect])

 例えば、ファイル選択ダイアログをここに組み込んでみます。あなたのPCのファイルツリーが表示されると思います。保存機能はオフにしてあります。

ただし、Excel97がインストールされたユーザでPCにEXCEL8.OLBにあればですが。


 まとめてみます。JScriptで書かれたコードのファイルをダブルクリックでスクリプトが自動実行されました。WSHの機能を利用しました。一方、ファイル選択ダイアログはページに張ったボタンをクリックでスクリプトが自動実行されました。
 EXCELをコントロールしたり、その部品を利用することに限定したら、WSHの機能はいりません。コードのソースを点検するとわかりますが、JScript(JavaScript)の機能のみで動作しています。これは、何を意味するのでしょう。動く楽しいホームページのスキルでアプリケーションが作れるという事です。いつも見ているブラウザがアプリケーションのプラットホームということになりませんか。


2003.11.17
by Kon