LoginSignup
23

More than 5 years have passed since last update.

JScriptでExcel操作(その2)

Posted at

はじめに

私の職場では、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)としています。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23