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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

1832閲覧

スプレッドシートで画像の関数が読み込まれてからpdfにしたい

Sou23

総合スコア38

Google スプレッドシート

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

Google Apps Script

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

0グッド

1クリップ

投稿2021/03/24 08:54

前提・実現したいこと

スプレッドシートで画像の関数が読み込まれてからpdfにしたいです。
一つのシートの中に様々な分岐をさせて異なる画像を入れたいと思っており、スプレッドシートにはそれが反映されるのですが、pdfにすると反映されたりされなかったりします。

### 該当のソースコード ```GAS function bill() { //予約を書き出すシート var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet= ss.getSheetByName('ご予約'); var sheet1 = ss.getSheetByName('伝票') var rows = sheet.getLastRow(); var columns = sheet.getLastColumn(); var range = sheet.getRange(1,1,rows,columns);  var values = range.getValues(); var key = ss.getId(); //pdfにするのに必要なオーソライゼーション var token = ScriptApp.getOAuthToken();  //それぞれのデータが存在するセル for(var i = 0; i < values.length; i++){ var name = values[i][1]; var date = values[i][2]; var payment = values[i][3]; var coupon = values[i][4]; var course = values[i][5]; var booking = values[i][6]; var language = values[i][7]; var table = values[i][8]; var coupon2 = values[i][9]; //もしチェックがついてなかったら、伝票を作ってね var check = values[i][0]; if(check == false){ // 貼り付ける画像のGoogleドライブID if(booking === '予約媒体: **' && course !== 'コース: 2時間'){ var x = '***'; var y = '***'; var z = '***'; var z_name = '学校' var p = ''; var q = ''; }else if(booking === '予約媒体: **' && payment === '支払い方法: 現地払い'){ var x = '***'; var y = '***'; var z = ''; var p = '***'; var q = ''; }else if(booking === '予約媒体: **' && payment !== '支払い方法: 現地払い'){ var x = ''; var y = ''; var z = ''; var p = ''; var q = ''; }else if(booking === '予約媒体: **' && payment === '支払い方法: 現地払い'){ var x = '***'; var y = '***'; var z = ''; var p = '***'; var q = '***'; }else if(booking === '予約媒体: **' && payment !== '支払い方法: 現地払い'){ var x = ''; var y = ''; var z = ''; var p = '***'; var q = '***'; }else if(booking === '予約媒体: **'){ var x = ''; var y = ''; var z = ''; var p = ''; var q = ''; }else if(booking === '予約媒体: **'){ var x = ''; var y = ''; var z = ''; var p = ''; var q = ''; }else if(course === 'コース: 2時間'){ var x = '***'; var y = '***'; var z = ''; var p = ''; var q = ''; } // 貼り付ける行 var row_x = 3; var row_y = 3; var row_z = 3; var row_p = 3; var row_q = 3; // 貼り付ける列 var column_x = 1; var column_y = 2; var column_z = 3; var column_p = 7; var column_q = 8; var gazou = sheet1.getRange(3,1); gazou.clearContent(); // ドライブ画像への直リンク取得用URL var link_url = "http://drive.google.com/uc?export=view&id="; //---------------------------------------------------------- // 指定された画像を貼り付ける //---------------------------------------------------------- // Googleドライブ内画像への直リンクURL var url_x = link_url + x; var url_y = link_url + y; var url_z = link_url + z; var url_p = link_url + p; var url_q = link_url + q; // スプレッドシートのIMAGE関数を使う sheet1.getRange(row_x, column_x).setValue('=IMAGE("' + url_x + '")'); sheet1.getRange(row_y, column_y).setValue('=IMAGE("' + url_y + '")'); sheet1.getRange(row_z, column_z).setValue('=IMAGE("' + url_z + '")'); sheet1.getRange(row_p, column_p).setValue('=IMAGE("' + url_p + '")'); sheet1.getRange(row_q, column_q).setValue('=IMAGE("' + url_q + '")'); var billsheet = ss.getSheetByName('伝票'); var billsheetid = billsheet.getSheetId(); var billrows = billsheet.getLastRow(); var billcolumns = billsheet.getLastColumn(); var billrange = billsheet.getRange(1,1,billrows,billcolumns); var nameplace = billsheet.getRange('A1'); var dateplace = billsheet.getRange('E1'); var paymentplace = billsheet.getRange('H2') var bookingplace = billsheet.getRange('H1'); var tableplace = billsheet.getRange('J1'); var couponplace = billsheet.getRange('I3') var couponplace2 = billsheet.getRange('I4') var schoolplace = billsheet.getRange('C5'); //情報記入 nameplace.setValue(name); dateplace.setValue(date); bookingplace.setValue(booking); paymentplace.setValue(payment); tableplace.setValue(table); couponplace.setValue(coupon); couponplace2.setValue(coupon2); schoolplace.setValue(z_name); SpreadsheetApp.flush(); SpreadsheetApp.flush(); //SpreadsheetApp.flush(); // シートの再描画,これで書き込み遅延を解消できるはず //pdf作成 var url = "https://docs.google.com/spreadsheets/d/" + key + "/export?gid=" + billsheetid + "&format=pdf&portrait=false&size=A5&gridlines=false&fitw=true&pagenumber=false&top_margin=0.15&bottom_margin=0.00&left_margin=0.15&right_margin=0.15"; var pdf = UrlFetchApp.fetch(url, {headers: {'Authorization': 'Bearer ' + token}}).getBlob().setName("伝票"+".pdf"); //pdf保存 var folder = DriveApp.getFolderById("***"); var file = folder.createFile(pdf); }else{ continue; } //check if done }//for終了 }//終了

試したこと

該当のセルに画像が入っていなければ伝票を作らないようにしてみたのですが、当然それだと画像が入ってくれるまで待ってくれるわけではなく、単純にpdfになりませんでした。
flushを2回入れるといいと見たのですが、機能しませんでした。
もしタイミングの問題なら仕方ないと思いますが、もし別の方法で解決が可能なら教えていただけますと幸いです。
よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

3回フラッシュさせたらいけました。
根本的な解決ではないと思いますがとりあえず解決とします。

投稿2021/03/25 00:16

Sou23

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問