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

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

ただいまの
回答率

87.49%

【GAS(PDF生成)】Exception: Request failed for https://docs.google.com returned code 500.

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 136

score 7

前提・実現したいこと

コード変更しておらず、先日まで動作していたPDF生成のGASになりますが、
昨日から下記のエラーが出てしまい一度も完了まで至りません。
For文を取り除いて単発生成する命令式であればエラー出ず、PDF生成までしっかり完了されました。

エラーコード500についてググってみてもよく分からず・・・
下記エラーメッセージに表示されている「savePdfMultiple    @ 【繰り返し】PDF生成.gs:73」は
「let blob = UrlFetchApp.fetch(url, options).getBlob().setName(fileName + '.pdf');」
の部分を指しています。

お手数をおかけしますがご確認よろしくお願い致します。

発生している問題・エラーメッセージ

10:06:32    お知らせ    
実行開始

10:06:33    エラー
Exception: Request failed for https://docs.google.com returned code 500. 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)
savePdfMultiple    @ 【繰り返し】PDF生成.gs:73

該当のソースコード

function savePdfMultiple(){
  //PDFの保存先(GDriveのフォルダID)
  let folderId = "*********************************";

  //アクティブなスプレッドシートを取得
  let ss = SpreadsheetApp.getActiveSpreadsheet();

  //スプレッドシートIDを取得
  let ssId = ss.getId();

  //一斉送信用整形データシートから出展社数を取得
  let companyList = ss.getSheetByName('PDF生成').getRange("K1").getValue();

  let eventName = ss.getSheetByName('PDF生成').getRange("I3").getValue();

  for(let i = 3; i <= companyList+2; i++){
    //PDF化するシートを取得
    let sheet = ss.getSheets()[i];

    let sheetId = sheet.getSheetId();

    //最終行を取得
    let lastRow = sheet.getRange("J1").getValue();

    //出展社名を取得
    let corporateName = sheet.getRange("F3").getValue();

    //ブース番号を取得
    let booth = sheet.getRange("E3").getValue();

    //ファイル名を定義
    let fileName = "【面談者リスト】" + eventName + " - " + booth + " - " + corporateName + " 御中"; 

    //createPdf
      let baseUrl = "https://docs.google.com/spreadsheets/d/"
            +  ssId
            + "/export?gid="
            + sheetId;

    //PDFのオプションを指定
    let pdfOptions = "&exportFormat=pdf&format=pdf"
                + "&size=A4" //用紙サイズ (A4)
                + "&portrait=false"  //用紙の向き 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" //スプレッドシート名の表示有無
                + "&sheetnames=false" //シート名の表示有無
                + "&gridlines=false" //グリッドラインの表示有無
                + "&fzr=false" //固定行の表示有無
                + "&fzc=false" //固定列の表示有無
                + "&range=A151%3AI"+lastRow;

    //PDFを作成するためのURL
    let url = baseUrl + pdfOptions;

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

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

    //PDFを作成する
    // @ts-ignore
    let blob = UrlFetchApp.fetch(url, options).getBlob().setName(fileName + '.pdf');

    //PDFの保存先フォルダー
    //フォルダーIDは引数のfolderIdを使用します
    let folder = DriveApp.getFolderById(folderId);

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

    //sleep
    Utilities.sleep(5000);
  }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • 3_April_2021

    2021/10/13 11:22

    この情報で原因に見当がつく人もいるかもしれませんし、それで解決できれば問題ありませんと思うのですが。メッセージと次のURLのmuteHttpExceptionsの説明を合わせて見ると、このパラメタを触れば、エラーに関連する情報を取得できそうに見えます、その方向での情報調査は行いましたか?
    https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchurl,-params

    キャンセル

  • nomunomura

    2021/10/13 16:42

    情報不足、丸投げ自覚しております。。。申し訳ございません。

    muteHttpExceptionsのことを認識しておらず、今試してみました。
    PDF全ページ正常に出力されGoogleDriveに格納されました。

    解決できたためベストアンサーとさせて頂きたいのですが、
    追記・修正依頼で解決してしまっているため自己解決になってしまいます。
    お手数でなければ解決方法を投稿していただければ、その後対応させて頂きます。

    不要でしたらご返信もお気遣いなく、数日後に自己解決とさせて頂きます。
    よろしくお願い申し上げます。

    キャンセル

  • 3_April_2021

    2021/10/14 18:01

    行為を非難するつもりはなかったので、誤解を招くような文章をお詫びします。回答に必要な情報収集と動作検証は、残念ながら報告前に終了しませんでした。自己解決に問題がなければ、自己解決をお願いします。

    キャンセル

  • 3_April_2021

    2021/10/14 18:09

    丸投げだとは思いませんが、質問ユーザの情報収集能力には研鑽の余地があると思いますので、この点は意識しておくといいと思います。私は質問で提示されたコードではSpreadsheetAppとトリガ関連のScriptAppを除いて知識や使用の経験がなく、500系のエラーも初めて見ました。その状態から情報収集をスタートしましたが、muteHttpExceptions:trueによって解決される可能性、500でこの対処が有効なときの原因に多かれ少なかれ言及していると思われる情報、それらの情報の正確性および本件との一致性を検証するために必要そうな処理、類似の問題で再び苦しまないために必要そうな処理などにあたりをつけるところまでは到達していました。

    キャンセル

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

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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