【GAS】Googleドライブにて、フォルダ内の複数のWordファイルをそれぞれPDFに変換する

 本記事ではGoogle Apps Script(GAS)を活用します。Google Drive内の任意フォルダにある多数のWordファイル(.docx)に対して、個別にPDF形式に一度に変換するスクリプトを載せました。このスクリプトを活用すれば、特に大量のファイルをまとめて処理したい場合に非常に便利です。

GASファイルを作成する方法

次の2通りあります。

  • プロジェクトのホームにて作成する。 https://script.google.com/ からできます。
  • 任意のgoogleドライブ上のフォルダにて、新規>その他>Google Apps Script を選択することでできます。あるいはフォルダ上でマウスの右クリックからでも同様にできます。

■ 全体コード

 上記で作成したGASファイルに下記コードをコピペすることで使用できます。ただし、wordファイルがあるフォルダIDと、pdfファイルを保存するフォルダIDは指定してください。
 フォルダIDとは、Google Drive上の各フォルダを一意に識別するための文字列です。このIDを使用することで、Google Apps ScriptやAPIから特定のフォルダを指定して操作できます。具体的には下図のようにブラウザのアドレスバーの最後の部分です。

function listDocxFilesInFolderAndSaveAsPdf() {
 var folderId = 'ここに、ワードファイルがあるフォルダIDを指定する';
 var folder = DriveApp.getFolderById(folderId);
 var files = folder.getFilesByType(MimeType.MICROSOFT_WORD);  // .docxファイルを取得
 var result = [];

 // .docxファイルのリストを作成
 while (files.hasNext()) {
   var file = files.next();
   result.push({
     name: file.getName(),
     id: file.getId()
   });
 }

 // ファイルの総数
 var totalFiles = result.length;

 // 結果を順番に処理してPDFを保存
 result.forEach(function(file, index) {
   savePdf(file.id, file.name, index + 1, totalFiles);  // インデックスをナンバリング用に渡す
 });

 // 全ての処理が完了したことをログに表示
 Logger.log('全てのPDF変換が完了しました。');
}

// PDFを保存する関数
function savePdf(docId, docName, currentIndex, totalFiles) {
 // PDFの保存先フォルダーID
 let folderId = "ここに、pdfファイルの保存先フォルダIDを指定する";

 // PDFに保存するファイル名を指定(拡張子 .docx を削除)
 let baseFileName = docName.replace(/\.docx$/, '');  // .docx 拡張子を削除

 // 関数createPdfを実行してPDFを作成して保存
 createPdf(folderId, docId, baseFileName);

 // ナンバリングと共にログに表示
 Logger.log('[' + currentIndex + '/' + totalFiles + '] PDF変換完了: ' + baseFileName);
}

// PDFを作成し指定したフォルダーに保存する関数
function createPdf(folderId, docId, fileName) {
 // PDFを作成するためのベースとなるURL
 let url = "https://docs.google.com/document/d/"
         + docId
         + "/export?&exportFormat=pdf&format=pdf";

 // アクセストークンを取得
 let token = ScriptApp.getOAuthToken();

 // ヘッダーにアクセストークンを格納
 let options = {
   headers: {
     'Authorization': 'Bearer ' + token
   }
 };

 // PDFを作成
 let blob = UrlFetchApp.fetch(url, options).getBlob().setName(fileName + '.pdf');

 // PDFの保存先フォルダー
 let folder = DriveApp.getFolderById(folderId);

 // PDFを指定したフォルダに保存
 folder.createFile(blob);
}

スクリプトの概要

次の3つの処理を順番にすることで、複数のファイルに対して一括処理できます。

  1. 指定したフォルダ内のWordファイル(.docx)の一覧を取得
  2. 取得した各Wordファイルに対して、順番にPDFへ変換
  3. 作成したPDFファイルを指定したフォルダに保存

■ 備考

Google Drive API権限の付与が必要です。初回実行時にGoogle Driveのアクセス権限が求められます。指示に従って承認してください。

以上

<広告>