はじめに
私の職場では、Excelがテンプレートになっていて、
文章作成時はWordではなくExcelである事が多いです。
また、正式版として提出する場合は、PDFに変換するようにとも言われます。
どのバージョンからか忘れましたが、ExcelにPDF出力する機能が増え
ExcelのPDF変換は楽になったものの、大量のExcelがあると開いては出力という、手間がかかります。
そんな時に作った、ツールをサンプルコードとします。
ExcelのPDF出力
以下で作った、jsにExcelファイルをドラッグ&ドロップすると
Excelと同じフォルダに、ファイル名(拡張子含む)+「.pdf」という
PDFファイルが作成されます。
ただし、Excelのページ設定がちゃんとされていないと、
文字が削れたりするので注意してください。
また、PDFの出力ファイルはダイアログなしで上書きされます。
xls2pdf.js
// パラメータ取得
var args = WScript.arguments;
// 「FileSystemObject」オブジェクト生成
var fso = new ActiveXObject("Scripting.FileSystemObject");
// パラメータ存在チェック
if (args.length > 0) {
// パラメータ数分ループ
for (var i = 0; i < args.length; i++) {
// パラメータ抽出(ドラッグ&ドロップしたファイルパス)
var file = args.item(i);
// ファイル存在チェック
if (fso.FileExists(file)) {
// 拡張子取得
var ext = fso.GetExtensionName(file).toLowerCase();
// 拡張子チェック
if (ext.indexOf("xls") == 0) {
// ExcelをPDFへ変換
xls2pdf(file, file + ".pdf");
} else {
// 拡張子が「xls*」でない場合
//WScript.Echo("「" + file + "」はの拡張子がExcelではありません。");
}
} else {
// ファイルが存在しない場合
//WScript.Echo("「" + file + "」は存在しません。");
}
}
} else {
// パラメータが無い場合
WScript.Echo("Excelファイルをドラッグ&ドロップしてください。");
}
// 終了
WScript.Quit(0);
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;
}
}
}
「Workbook」に対してExportAsFixedFormat
メソッドを呼ぶことで
「Workbook」全体をPDF化しています。
第一引数は、出力タイプでPDF(0)としています。
第二引数は、出力ファイル名です。
第三引数は、PDFの品質で普通(0)としています。