Windows TIPS
[Scripting]
  Windows TIPS TOPへ
Windows TIPS全リストへ

WSHからExcelファイルの設定情報を読み込む

解説をスキップして操作方法を読む

山田 祥寛
2004/12/18
 
対象OS
Windows NT
Windows 2000
Windows XP
Windows Server 2003
アプリケーションのデータ・ファイルとして、カンマ/タブ区切り形式やXML形式が採用されるケースは多い。しかしこの形式はいずれも視認性に乏しい、編集の手間が煩雑などの要因から、エンド・ユーザーにメンテナンスさせるのは必ずしも容易ではない。
Excelフォーマットを用いることで、データの中身を人間が視認しやすくなり、メンテナンスを行う際の不用意な誤りも減らすことができる。
 
解説

 Windows TIPS「WSHからXMLファイルの設定情報を読み込む」では、WSH(Windows Script Host)からXML(eXtensible Markup Language)形式の設定ファイルを利用する方法について紹介した。XMLは拡張性にも優れており、可読性にも富んだフォーマットである。だがエンド・ユーザーがその内容を直接編集するのには必ずしも適したフォーマットではない。

 だからといって単純なカンマ/タブ区切り形式では、区切りなどが分かりづらくてデータを入力・編集しにくいし、Excelのような高度な入力支援機能も利用できない。

 そこで本TIPSでは、データの入力やチェックにExcelを活用して、WSHと連携する例を紹介する。Excel形式ならば、エンド・ユーザーも使い慣れたツールなので容易に編集できるし、必要に応じて、選択ボックスを用意したり、入力値のチェックなどを設定することも可能になる。

 本TIPSではExcel形式のデータ・ファイルをWSHから利用する一例として、Windows TIPS「配信リストを使ってメールをいっせいに配信する」で利用したメール配信サンプルのロジックをWSHスクリプトに置き換えてみることにしたい。なお、ここではあくまでもExcelファイルの読み込みに特化した部分を重点的に解説する。そのほかのメール配信など細かいロジックについては、先のWindows TIPS記事を参照してほしい。


操作方法

手順1―追加コンポーネント「Basp21」をインストールする

 本サンプルを実行するに際しては、あらかじめ追加のコンポーネントとしてBasp21をインストールしておく必要がある。Basp21の詳細やインストール方法については、先のTIPS「配信リストを使ってメールをいっせいに配信する」の手順1を参照いただきたい。

手順2―テキスト・エディタでスクリプトのコードを入力する

 まずはテキスト・エディタ(メモ帳でも何でもよい)を開き、以下のコードを入力してsendmail.wsfというファイルを作成してほしい。ただし引用符(')で始まる行はコードの意味を解説するためのコメント部分なので、省略してもよい。プログラムの処理内容やExcelファイルの読み込み方法などについては、コメントを参照していただきたい。

※ファイル:sendmail.wsf

<?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?>
<?job error="true" debug="true" ?>
<package>
  <job id="SendMail">
  <object id="objBsp" progid="Basp21" />
  <object id="objXls" progid="Excel.Application" />
  <script language="VBScript">
  <![CDATA[
  Const END_ROW = 5
  ' 配信リストを記録したExcelファイルへのパスを定数CONFIGにセット
  Const CONFIG="c:\sendmail.xls"
  strSrv = "smtp.example.co.jp"
  strFrm = "Windows News <winnews@example.co.jp>"
  strSbj = "Windows 通信[2004/12/31]Office TIPS 開始"
  strBdy = "こんにちは、メール配信プログラムです"
  strFle = ""
  ' 定数CONFIGで設定されたExcelファイルをオープン
  Set objBok=objXls.Workbooks.Open(CONFIG)
  ' 3〜END_ROW行目までをループし、○が付いている行についてのみメール送信
  For i = 3 To END_ROW
    strAdd = objXls.Cells(i, 4)
    strNam = objXls.Cells(i, 3)
    strFlg = objXls.Cells(i, 2)
    If strFlg = "○" Then
      If strAdd <> "" Then
        strTo = strNam & "<" & strAdd & ">"
        lngRst = objBsp.SendMail(strSrv, strTo, strFrm, strSbj, strBdy, strFle)
      End If
    End If
  Next
  ' 処理完了後は、Excelファイルをクローズ
  objXls.Quit()
  ]]>
  </script>
  </job>
</package>
  • サンプル・ファイルのダウンロード
    :サンプルsendmail.wsfを実行するには、上のサンプル・ファイルを右クリックしてsendmail.wsfというファイル名で保存する。さらにC:ドライブのルートにサンプル・データ・ファイルをsendmail.xlsというファイル名で保存しておく)

 WSHスクリプトからExcelを利用するといっても何ら難しいことはない。Excelオブジェクトを生成した後は、Excel VBAと同じ要領でExcel内部のワークシートやセルにアクセスできることが分かるだろう。なおWSHスクリプトからExcelを使用した後は、必ずQuitメソッドでブックの終了処理を行う必要がある。さもないと、メモリ上のExcelオブジェクトがいつまでも破棄されないので注意すること。

手順3―メールを配信する

 コードの記述が終わったら、実際にメールを配信してみよう。sendmail.wsfを実行するには、エクスプローラなどからsendmail.wsfをダブルクリックするだけでよい。その際、あらかじめ上記のスクリプト中の定数CONFIGで指定されたメール・アドレスのリスト(ここでは「c:\sendmail.xls」としている)が実際に存在することを確認しておいてほしい。実行後、sendmail.xls上で指定されたメール・アドレスに対してメールが送信されていれば成功だ。

 今回の例では、エラー処理もしていないし、正しく送信できたかどうかも確認していないが、Basp21ではメールの配送ログを生成する機能もあるので、必要に応じて利用するとよい。Basp21でメールの配送ログを生成する方法については、Windows TIPS「テンプレートを元に複数のメールを一括配信する」で紹介しているので、併せてご覧いただきたい。End of Article

「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間