「jscript excel シートを順番に処理」
という検索キーワードで、このサイト・インストラクターのネタ帳へのアクセスがありました。
JScriptでExcelのシートを、順番にループ処理するには、どのようなコードを書けばいいのか探していた方による検索です。
Excelを自動的に処理するには、(JavaScriptをご存じの方がVBScriptを学習する時間を考慮しても)JScriptよりVBScriptを使うほうが、トータルの苦労は結局は少なくて済むと思うのですが、とりあえず、JScriptでExcelのシートを順番に処理するスクリプトを作ってみました。
Excelシートを順番に処理するサンプルスクリプト
以下のスクリプトを拡張子「.js」で保存して、Excelファイルをドラッグアンドドロップすると、
「Book1.xlsx には、次のシートがあります。」
と表示されたあとに、シートの名前がメッセージボックスに、順番に表示されます。
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 = 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メソッドでブックを開いています。
- Newer:Word VBAでShapeをすべて削除する
- Older:Word文書から表を削除するVBScript
Home » WSH・Windows Script Hostの使い方 » Excelシートを順番に処理するJScript