前提・実現したいこと
スプレッドシートで画像の関数が読み込まれてから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回入れるといいと見たのですが、機能しませんでした。
もしタイミングの問題なら仕方ないと思いますが、もし別の方法で解決が可能なら教えていただけますと幸いです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。