Home » WSH・Windows Script Hostの使い方 » Excelシートを順番に処理するJScript

JScript, WSH, Excel

Excelシートを順番に処理するJScript

「jscript excel シートを順番に処理」
という検索キーワードで、このサイト・インストラクターのネタ帳へのアクセスがありました。

JScriptでExcelのシートを、順番にループ処理するには、どのようなコードを書けばいいのか探していた方による検索です。

Excelを自動的に処理するには、(JavaScriptをご存じの方がVBScriptを学習する時間を考慮しても)JScriptよりVBScriptを使うほうが、トータルの苦労は結局は少なくて済むと思うのですが、とりあえず、JScriptでExcelのシートを順番に処理するスクリプトを作ってみました。

[スポンサードリンク]

Excelシートを順番に処理するサンプルスクリプト

以下のスクリプトを拡張子「.js」で保存して、Excelファイルをドラッグアンドドロップすると、
「Book1.xlsx には、次のシートがあります。」
と表示されたあとに、シートの名前がメッセージボックスに、順番に表示されます。

// -- main begin ----
if ( WScript.Arguments.Count() === 0 ) {
  WScript.Echo('Excelファイルを、ドラッグ&ドロップしてください。');
  WScript.Quit();
}

var xls = new ActiveXObject('Excel.Application');
xls.Visible = false;
var fso = new ActiveXObject('Scripting.FileSystemObject');

for ( var i = 0; i < WScript.Arguments.Count(); i++ ) {
  var f_path = WScript.Arguments(i);

  switch( fso.GetExtensionName(f_path).toUpperCase() ) {
    case 'XLS':
    case 'XLSX':
    case 'XLSB':
    case 'XLSM':
      doSomethingAllSheets(f_path);
      break;

    default:
      WScript.Echo(fso.GetFileName(f_path) + ' は、Excelファイルではありません。');
  }
}

fso = null;
xls.Quit();
xls = null;
WScript.Echo('終了しました。');
// -- main end ----

function doSomethingAllSheets(bk_path) {
  var bk = xls.Workbooks.Open(bk_path);
  WScript.Echo(bk.Name + ' には、次のシートがあります。');

  for ( var i = 1; i <= bk.Sheets.Count; i++ ) {
    WScript.Echo(bk.Sheets(i).Name);
  }

  bk.Close();
  bk = null;
  return;
}

サンプルスクリプトについて

「jscript excel シートを順番に処理」
という検索をなさった方は、JScriptの基本はOKなのでしょうから、シートを順番に処理する部分だけ補足しておきます。

シートを順番に処理しているのは、doSomethingAllSheets関数の、
   for ( var i = 1; i <= bk.Sheets.Count; i++ ) {
     WScript.Echo(bk.Sheets(i).Name);
   }
というfor文です。

VBAやVBScriptならば、
  For i = 1 To bk.Sheets.Count
   MsgBox bk.Sheets(i).Name
  Next
と書くところです。

JScriptから、Excelライブラリに属するオブジェクトを操作する式の、カッコのルールがどうも統一感に欠けるようで、
  xls.Quit();
という、Excel.Application.Quitメソッドのカッコはつけないとエラーになり、
  bk.Close();
という、Excel.Workbook.CloseメソッドのカッコはつけてもつけなくてもOKなようですが、ここでは、
 メソッドは引数をとらなくてもカッコをつける
 プロパティは引数をとらない場合カッコなし
というルールで書いています。

そのため、上記のスクリプトでは、
   for ( var i = 1; i <= bk.Sheets.Count; i++ ) {
の、Excel.Sheets.Countや、
     WScript.Echo(bk.Sheets(i).Name);
の、Excel.Workbook.Worksheet.Name(またはExcel.Workbook.Chart.Name)は、いずれもプロパティですのでカッコをつけていません。

ちなみに、
   for ( var i = 1; i <= bk.Sheets.Count; i++ ) {
と同じ「Count」という単語であっても、main部分の、
  if ( WScript.Arguments.Count() === 0 ) {
  for ( var i = 0; i < WScript.Arguments.Count(); i++ ) {
のCountはメソッドなのでカッコが必要です。

もちろん、
   for ( var i = 1; i <= bk.Sheets.Count; i++ ) {
というfor文でいきなりシートを操作することはできませんから、for文に入る前に、
   var bk = xls.Workbooks.Open(bk_path);
と、Excel.Workbooks.Openメソッドでブックを開いています。

[スポンサードリンク]

Home » WSH・Windows Script Hostの使い方 » Excelシートを順番に処理するJScript

「WSH・Windows Script Hostの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.