sedmicka
@sedmicka

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

GASでPDF作成時にエラーが出る

Q&A

Closed

解決したいこと

GASでスプレッドシートからPDFを作成するスクリプトを作成しています。
基本的には正しくPDFが出力できているのですが、
出力させる行数が一定以上を超えるとエラーが発生してしまいます。

発生している問題・エラー

GASの画面上でエラーは表示されないのですが、出力されたPDFがGoogleドライブ上でGoogleドキュメントとして認識され、こちらのテキストが表示されてしまいます。

Google ドキュメント内でエラーが発生しました。このページを再読み込みするか、数分後にこのページをもう一度開いてみてください。
Google ドキュメント エディタの詳細については、ヘルプセンターをご参照ください。

ご不便をおかけして申し訳ございません。
- Google Docs チーム

該当するソースコード

引数に設定しているrowが35あたりを超えると出力に失敗してしまうようです。

function createPdf(newfolder, ssId, sheetId, fileName, row){

  // スプレッドシートをPDF出力するためのURL
  const url = 'https://docs.google.com/spreadsheets/d/' + ssId + '/export?'
  
  // PDF出力のオプションを設定
  const options = 'exportFormat=pdf&format=pdf'
  + '&gid=' + sheetId  //PDFにするシートの「シートID」
  + '&portrait=true'  //true(縦) or false(横)
  + '&size=A4'         //印刷サイズ
  + '&fitw=true'       //true(幅を用紙に合わせる) or false(原寸大)
  + '&gridlines=false' //グリッドラインの表示有無
  + '&range=A1%3AH'+row   //セル範囲を指定
  
  const requestUrl = url + options;
  
  //API使用のためのOAuth認証
  const token = ScriptApp.getOAuthToken();
  
  const params = {
    'headers' : {'Authorization':'Bearer ' + token},
    'muteHttpExceptions' : true
  };
  
  const response = UrlFetchApp.fetch(requestUrl, params);
  
  //Blobオブジェクトを作成
  const blob = response.getBlob();
  blob.setName(fileName + '.pdf'); //PDFファイル名を設定
  
  //指定のフォルダにPDFファイルを作成
  newfolder.createFile(blob);
}

追記

PDF出力させるシートのデータを変えて試したところ、データによっては出力最大行数を35行以上に変更しても出力に成功することがわかりました。

出力に失敗するデータの特徴として、セル内の文字数が多く複数行に渡って文字が記載されているセルが多いことが挙げられるかと思います。確信はありませんが、現時点では改ページ設定が原因なのかと推測しております。

0

2Answer

range=A1:H35だとして、セルH35までの出力が終わっていないタイミングで、上記のメソッドを呼び出したりしていませんか?
メソッド呼び出し前に、SpreadsheetApp.flush()を入れてみるとか。

1Like

Comments

  1. @sedmicka

    Questioner

    ありがとうございます。こちら試してみましたが同様のエラーが発生してしまいました。

  2. さらに調べるにはcreatePdfメソッドを呼び出す側のコードも必要となりますが、開示可能でしょうか?

  3. @sedmicka

    Questioner

    開示可能なのですが、createPdf単体で試してもうまくいく場合といかない場合があるためcreatePdf自体に問題があると考えています。

    ちなみに、createPdf単体で試す際は以下のスクリプトを追加しています。

    function createPdf_test(newfolder, ssId, sheetId, fileName, row){

    //テスト実施時に追加した箇所
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var ssId = ss.getId();
    var sheet = ss.getSheetByName("テンプレート");
    var sheetId = sheet.getSheetId();
    var fileName = "test"
    var row = 40;

    //以下同様
    }

    テストで発覚した内容を質問に追記を記載しておりますので、可能であればそちらに目を通していただけますと幸いです。ご協力いただきありがとうございます。

  4. createPdfメソッド自体に問題は無いと思います。

  5. @sedmicka

    Questioner

    解決いたしました!ご回答いただきありがとうございました。

弊社の事例ですが、PDFに変換する領域内に環境依存文字 (チェックボックス: ☑) が含まれており、同様のエラーが出たことがあります。

1Like

Comments

  1. @sedmicka

    Questioner

    環境依存文字が含まれておりました!大変助かりました。
    ご回答いただきありがとうございました。

Your answer might help someone💌