Windows10のコマンドラインから、cscriptを使って特定のフォルダにあるエクセルファイルを全部PDF化したい
解決したいこと
Windows10のコマンドラインから、cscriptを使って特定のフォルダにあるエクセルファイルを全部PDF化したい
素人ながらいろいろなブログを参照して、以下のようなスクリプト(.jsファイル)を試作してみましたが、うまく行きません。
jsファイルはc:\tempに置きました
複数のエクセルファイルはc:\temp2 に置きました。
以下のようなコマンドを発行しましたが、プロンプトがロックされたままでうんともすんとも行きません。
cscript c:\temp\test.js c:\temp2\
c:\temp2は1階層で、サブフォルダはありません。
他からいただいたスクリプトなので、本来不要な部分があると思いますが、見分けがつかないのです。それともコマンドのパラメーター表現が悪いのでしょうか。
該当するソースコード (test.js)
var args = WScript.Arguments;
var rootDir = args.Unnamed(0);
var wsh = new ActiveXObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
// folderPath以下をトラバースしてファイル名をかき集める
function CheckFolder(filePathAry, folderPath, collectFunctor) {
var folderObj = fso.GetFolder(folderPath);
// ファイル名列挙
var files = new Enumerator(folderObj.Files);
for (; !files.atEnd(); files.moveNext()) {
var filePath = fso.GetAbsolutePathName(files.item());
if (collectFunctor(filePath) == true)
filePathAry.push(filePath);
}
// サブフォルダへ
var folders = new Enumerator(folderObj.SubFolders)
for (; !folders.atEnd(); folders.moveNext()) {
CheckFolder(filePathAry, folderPath + "\\" + folders.item().Name, collectFunctor);
}
}
// 取得フィルター
// 全部集める
function nullFunctor(filePath) {
return true;
}
// 特定拡張子のみ
function extFunctor(filePath) {
var extArray = ["xlsx"];
var ext = fso.GetExtensionName(filePath);
for (var i = 0; i < extArray.length; i++)
if (ext == extArray[i])
return true;
return false;
}
// カレントディレクトリ取得
var rootDir = wsh.CurrentDirectory;
var filePathAry = new Array;
CheckFolder(filePathAry, rootDir, extFunctor); // <- Fuctorでフィルター掛けられます
// 収集したファイルフルパスチェック
for (var i = 0; i < filePathAry.length; i++)
WScript.Echo(filePathAry[i]);
{
var file = filePathAry[i];
xls2pdf(file, file + ".pdf");
}
function xls2pdf(infile, outfile) {
var excel = null;
try {
// Excelオブジェクト生成
excel = new ActiveXObject("Excel.Application");
var book = null;
try {
// 読み取り専用で開く
book = excel.Workbooks.Open(infile, 0, true);
// PDF出力(xlTypePDF(0)、出力ファイル、xlQualityStandard(0))
book.ExportAsFixedFormat(0, outfile, 0);
} catch (e) {
// エラーの場合
WScript.Echo("IN:" + infile + "\nOUT:" + outfile
+ "\nError(" + (e.number & 0xFFFF) + "):" + e.message);
} finally {
// Workbookオブジェクト存在チェック
if (book != null) {
// Workbookを閉じる
book.Close(false);
book = null;
}
}
} catch (e) {
// エラーの場合
WScript.Echo("IN:" + infile + "\nOUT:" + outfile
+ "\nError(" + (e.number & 0xFFFF) + "):" + e.message);
} finally {
if (excel != null) {
excel.Quit();
excel = null;
}
}
}