JScript で Excel

Excel のシート名を列挙する

lesson001.js


var objExcel = WScript.CreateObject("Excel.Application");
objExcel.Visible = true;
objExcel.DisplayAlerts = false; //警告メッセージをOFF

//ブックを読み取り専用で開く
var book = objExcel.Workbooks.Open(WScript.Arguments(0));

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

objExcel.Quit();
objExcel = null;

実行結果

C:\>cscript c:\study\jscript\chapter004\lesson001.js c:\study\Book1.xls //nologo

Sheet1
Sheet2
Sheet3

なぜか、1行余分に出力される...

これでも OK

lesson002.js


var objExcel = WScript.CreateObject("Excel.Application");
objExcel.Visible = true;
objExcel.DisplayAlerts = false; //警告メッセージをOFF

//ブックを読み取り専用で開く
var book = objExcel.Workbooks.Open(WScript.Arguments(0));

var sheet = new Enumerator(book.Sheets);
for (; !sheet.atEnd(); sheet.moveNext())
{
WScript.Echo(sheet.item().Name);
}

objExcel.Quit();
objExcel = null;

実行結果

C:\>cscript c:\study\jscript\chapter004\lesson002.js c:\study\Book1.xls //nologo

Sheet1
Sheet2
Sheet3

これは、だめ

lesson003.js


var objExcel = WScript.CreateObject("Excel.Application");
objExcel.Visible = true;
objExcel.DisplayAlerts = false; //警告メッセージをOFF

//ブックを読み取り専用で開く
var book = objExcel.Workbooks.Open(WScript.Arguments(0));

for (sheet in book.Sheets)
{
WScript.Echo(sheet.item().Name);
}

objExcel.Quit();
objExcel = null;

実行結果

C:\>cscript c:\study\jscript\chapter004\lesson003.js c:\study\Book1.xls //nologo

VB でのfor each は、コレクション(例えば、今回のSheets )にアクセスできますが、
JScript での for in では、コレクションにはアクセスできません。」そうです。