質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

解決済

【GAS】PDF作成時のエラーコード

Yam_Fu
Yam_Fu

総合スコア10

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

1回答

0リアクション

0クリップ

2873閲覧

投稿2021/04/22 13:23

PDFを自動で複数作成し、結合した状態で指定のフォルダに格納するスクリプトをネットの情報をもとに独自アレンジを加えて作成。
いざ実行をさせた際に以下エラーが発生し、試行錯誤しましたが解決できず息詰まってしまい質問をさせていただきました。

<実現したいこと>
スプレッドシートの複数作成しているシートをそれぞれPDFにして仮フォルダに格納。
その後仮フォルダに格納されたPDFを1枚に結合して確定版のフォルダに格納。その際にフォルダ名も変更。
その後仮フォルダに保存されている複数のPDFを削除。

<その際のエラーメッセージ>
Exception: Request failed for https://docs.google.com returned code 400. Truncated server response: <!DOCTYPE html><html lang="ja"><head><meta name="description" content="ウェブ ワープロ、プレゼンテーション、スプレッドシート"><meta name="viewport" content="width=device-wid... (use muteHttpExceptions option to examine full response)

現在のところエラーとなっている以下の部分の対応を検証中ですがこれといって成果がなく・・・。
var blob = UrlFetchApp.fetch(url, options).getBlob().setName(name); //PDFを作成する

また前後部分も含めて調べてはいるものの根本的に間違っている可能性もありますが今のスキルレベルではなかなか特定ができず、
ご教示いただけますと幸いです。

よろしくお願い致します。

GAS

function CreatePdf(){ //当該スプレッドシートをPDFに変換して指定のフォルダに保存するScript var folderId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; //一時保管用のフォルダIDを定義 var ss = SpreadsheetApp.getActiveSpreadsheet(); //アクティブなスプレッドシートを取得 var sheet = ss.getSheetByName(sheetName2); //スプレッドシートの名前を取得 var LastRow = sheet.getRange(6, 29, 205, 1).getValues().filter(String).length; //空白の要素を除いた取得指定のスプレッドシートの長さを取得 var SheetIds = sheet.getRange(6, 29, LastRow, 1).getValues(); //指定範囲の値(シートID)を取得 var ssId = ss.getId(); //アクティブなスプレッドシートのIDを取得 var date = new Date(); //今日の日時情報を取得 var dateString = Utilities.formatDate(date, "Asia/Tokyo", "yyyyMMddHHmmss"); //日時情報を文字列に変換 //表紙の6〜i行目に記載されたSheetIdに基づきPDFを生成する。 for (var i = 6; i <= SheetIds.length + 6; i++) { //「6」は繰り返しスタートの行数分をプラス var shId = sheet.getRange(i, 29).getValue(); //指定シートの指定範囲の値を取得 var name = i + ".pdf"; //保存ファイルの名前を形式指定 var token = ScriptApp.getOAuthToken(); //アクセストークンを取得しAPIリクエストを送信する var baseUrl = "https://docs.google.com/spreadsheets/d/" + ssId + "/export?gid=" + shId; //スプレッドシートをPDF出力するためのURLを設定 var pdfOptions //PDF出力のオプションを設定(URLの組み立て) = "&exportFormat=pdf&format=pdf" //ファイル形式の指定 pdf / csv / xls / xlsx + "&size=A4" //用紙サイズ (A4) + "&portrait=true" //用紙の向き true: 縦向き / false: 横向き + "&fitw=true" //ページ幅を用紙にフィットさせるか true: フィットさせる / false: 原寸大 + "&top_margin=0.50" //上の余白を設定 + "&right_margin=0.50" //右の余白を設定 + "&bottom_margin=0.50" //下の余白を設定 + "&left_margin=0.50" //左の余白を設定 + "&horizontal_alignment=CENTER" //水平方向の位置を設定 + "&vertical_alignment=TOP" //垂直方向の位置を設定 + "&printtitle=false" //スプレッドシート名の表示有無 trueで表示あり、falseで表示なし(記述方法 "&sheetnames=true") + "&sheetnames=false" //シート名の表示有無 trueで表示あり、falseで表示なし(記述方法 "&sheetnames==true") + "&note=false" //??? var url = baseUrl + pdfOptions; //PDFを作成するためのURL var options = {headers: {'Authorization': 'Bearer ' + token}}; //headersにアクセストークンを格納する var blob = UrlFetchApp.fetch(url, options).getBlob().setName(name); //PDFを作成する var folder = DriveApp.getFolderById(folderId); //PDFの保存先フォルダを指定 folder.createFile(blob) //PDFを指定したフォルダに保存する Logger.log(i) // var staySecond = 2 //「秒数」を設定(PDFにする処理がHTTP(S)の通信を必要とするため以下の処理が必要) Utilities.sleep(staySecond * 1000); //意図しないエラーを防ぐため一時的に処理を遅らせる処理を設定(時間がミリ秒単位のため1000掛ける) } //一時保管フォルダのファイル一覧を取得して、1つのPDFに統合する。 var iteratorList = folder.getFiles(); //「folder」に対して全てのファイルを取得する var pdfList = []; //リスト用の空の一次元配列を作成 var pattern = /.*.pdf$/; //拡張子(ファイルのタイプのこと:「.xlsx」「.pdf」など)の指定(正規表現) while (iteratorList.hasNext()){ //「iteratorList」に対して一時保管フォルダにまだ取り出していないファイルが存在するかを判定 var file = iteratorList.next(); //「iteratorList」に対して反復処理でまだ取り出していないファイルがあれば「file」に格納 if (pattern.test(file.getName())){ //ファイルの拡張子(ファイルのタイプのこと:「.xlsx」「.pdf」など)をチェック pdfList.push(file); //一次元配列に格納 } } var mergedFileName = FileName + dateString + ".pdf"; //結合後のPDFファイルのファイル名を指定 mergedFile = mergePdfs(folder, mergedFileName, pdfList); //PDFの結合を実行 a = merge Logger.log("PDFs merged") //一時保管フォルダから統合したPDFを検索して、指定フォルダに移動させる。 var files = folder.getFilesByName(mergedFileName); //「folder」に対して全ての結合後のPDFファイルのファイル名を「files」に格納        while (files.hasNext()) { //「filse」に対して一時保管フォルダにまだ取り出していないファイルが存在するかを判定 var file = files.next(); //「iteratorList」に対して反復処理でまだ取り出していないファイルがあれば「file」に格納 var fileName = file.getName(); //「file」に対して格納されている全てのファイル名を「fileName」に格納 console.log(fileName); } var storage = DriveApp.getFolderById('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); //結合後のPDFファイルを格納するフォルダIDを設定 file.moveTo(storage); //「file」に対して作成したファイルを指定先のフォルダに移動させる Logger.log("Merged PDF moved") //一時保管フォルダに残された個別PDFを削除する。 var individualFiles = folder.getFiles(); //「folder」に対して全てのファイル名を取得 while(individualFiles.hasNext()){       //「individualFiles」に対してまだ取り出していないファイルが存在するかを判定 var file = individualFiles.next(); //「individualFiles」に対して反復処理でまだ取り出していないファイルがあれば「file」に格納 file.setTrashed(true); //「file」に対してファイルを削除 } Logger.log("Individual files trashed") //おめでとう Browser.msgBox("指定のフォルダにPDFが出力されました") // }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。