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

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

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

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

Google Apps Script

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

PDF

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

0回答

1247閲覧

スプレッドシートにimage関数で入れた画像をpdfに反映したい

Sou23

総合スコア38

Google スプレッドシート

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

Google Apps Script

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

PDF

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2021/03/26 05:20

編集2021/03/26 06:14

前提・実現したいこと

スプレッドシートにimage関数で入れた画像をpdfに反映したいです。
画像は条件分岐させて記入するので、image関数を使っています。
以前も同じ質問をして、その時はSpreadsheetApp.flush();を使って更新することでできるようになりました。

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

しかし数日経って、突然全ての関数部分の画像が表示されなくなりました。
たまにランダムに1つだけ表示されたりします。ちなみにスプレッドシート上では全て問題なく表示されており、pdfになるとそれが消えている状態です。
動作の速度やタイミングの問題ではなく、pdfにする際に関数が画像になるかどうかそのものにランダム性が含まれているように感じます。

該当のソースコード

GAS

1function bill() { 2 //予約を書き出すシート 3 var ss = SpreadsheetApp.getActiveSpreadsheet(); 4 var sheet= ss.getSheetByName('ご予約'); 5 var sheet1 = ss.getSheetByName('伝票') 6 var rows = sheet.getLastRow(); 7 var columns = sheet.getLastColumn(); 8 var range = sheet.getRange(1,1,rows,columns); 9 var values = range.getValues(); 10 var key = ss.getId(); 11//pdfにするのに必要なオーソライゼーション 12var token = ScriptApp.getOAuthToken(); 13 14 15 //それぞれのデータが存在するセル 16for(var i = 0; i < values.length; i++){ 17var name = values[i][1]; 18var date = values[i][2]; 19var payment = values[i][3]; 20var coupon = values[i][4]; 21var course = values[i][5]; 22var booking = values[i][6]; 23var language = values[i][7]; 24var table = values[i][8]; 25var coupon2 = values[i][9]; 26 27//もしチェックがついてなかったら、伝票を作ってね 28var check = values[i][0]; 29if(check == false){ 30 31 32// 貼り付ける画像のGoogleドライブID 33if(booking === '予約媒体: **' && course !== 'コース: 2時間'){ 34var x = '1Wumuy-Oo9QGg8H9bIXczmsBDn3M48z95'; 35var y = '1NyPm6se2uEnolBD4RLNHg7vncKuYL8Jr'; 36var z = '1ks0i_YQrs4lEJbyL1L5KhAuXMxtCwsdJ'; 37var z_name = '学校' 38var p = ''; 39var q = ''; 40}else if(booking === '予約媒体: **' && payment === '支払い方法: 現地払い'){ 41var x = '1Wumuy-Oo9QGg8H9bIXczmsBDn3M48z95'; 42var y = '1NyPm6se2uEnolBD4RLNHg7vncKuYL8Jr'; 43var z = ''; 44var p = '1rxDhi-7r_Y83rQ0Kg6I_2w6JW0dP3_xF'; 45var q = ''; 46 }else if(booking === '予約媒体: **' && payment !== '支払い方法: 現地払い'){ 47 var x = ''; 48 var y = ''; 49 var z = ''; 50 var p = ''; 51 var q = ''; 52}else if(booking === '予約媒体: **' && payment === '支払い方法: 現地払い'){ 53 var x = '1Wumuy-Oo9QGg8H9bIXczmsBDn3M48z95'; 54 var y = '1NyPm6se2uEnolBD4RLNHg7vncKuYL8Jr'; 55 var z = ''; 56 var p = '1rug02SrA2Wfl2DAcds6UJ4bpyOW0uLWL'; 57 var q = '1VJYSxXg7S77KA58qHBbIvXRWm_8Q7b36'; 58 }else if(booking === '予約媒体: **' && payment !== '支払い方法: 現地払い'){ 59 var x = ''; 60 var y = ''; 61 var z = ''; 62 var p = '1rug02SrA2Wfl2DAcds6UJ4bpyOW0uLWL'; 63 var q = '1VJYSxXg7S77KA58qHBbIvXRWm_8Q7b36'; 64}else if(booking === '予約媒体: **'){ 65 var x = ''; 66 var y = ''; 67 var z = ''; 68 var p = ''; 69 var q = ''; 70}else if(booking === '予約媒体: **'){ 71 var x = ''; 72 var y = ''; 73 var z = ''; 74 var p = ''; 75 var q = ''; 76}else if(course === 'コース: 2時間'){ 77 var x = '1J8w0zcCEEgMdD6kHOPZlNZGEqtGcGp8q'; 78 var y = '1rwMTR184dg9qHC9D0Lt0_ePMNvhekzoN'; 79 var z = ''; 80 var p = ''; 81 var q = ''; 82} 83 84// 貼り付ける行 85var row_x = 3; 86var row_y = 3; 87var row_z = 3; 88var row_p = 3; 89var row_q = 3; 90// 貼り付ける列 91var column_x = 1; 92var column_y = 2; 93var column_z = 3; 94var column_p = 7; 95var column_q = 8; 96 97 98// ドライブ画像への直リンク取得用URL 99var link_url = "http://drive.google.com/uc?export=view&id="; 100 101//---------------------------------------------------------- 102// 指定された画像を貼り付ける 103//---------------------------------------------------------- 104 105 // Googleドライブ内画像への直リンクURL 106 var url_x = link_url + x; 107 var url_y = link_url + y; 108 var url_z = link_url + z; 109 var url_p = link_url + p; 110 var url_q = link_url + q; 111 112 // スプレッドシートのIMAGE関数を使う 113 sheet1.getRange(row_x, column_x).setValue('=IMAGE("' + url_x + '")'); 114 sheet1.getRange(row_y, column_y).setValue('=IMAGE("' + url_y + '")'); 115 sheet1.getRange(row_z, column_z).setValue('=IMAGE("' + url_z + '")'); 116 sheet1.getRange(row_p, column_p).setValue('=IMAGE("' + url_p + '")'); 117 sheet1.getRange(row_q, column_q).setValue('=IMAGE("' + url_q + '")'); 118 119 120//伝票位置決め 121var billsheet = ss.getSheetByName('伝票'); 122var billsheetid = billsheet.getSheetId(); 123var billrows = billsheet.getLastRow(); 124var billcolumns = billsheet.getLastColumn(); 125var billrange = billsheet.getRange(1,1,billrows,billcolumns); 126var nameplace = billsheet.getRange('A1'); 127var dateplace = billsheet.getRange('E1'); 128var paymentplace = billsheet.getRange('H2') 129var bookingplace = billsheet.getRange('H1'); 130var tableplace = billsheet.getRange('J1'); 131var couponplace = billsheet.getRange('I3') 132var couponplace2 = billsheet.getRange('I4') 133var schoolplace = billsheet.getRange('C5'); 134 135 136//情報記入 137nameplace.setValue(name); 138dateplace.setValue(date); 139bookingplace.setValue(booking); 140paymentplace.setValue(payment); 141tableplace.setValue(table); 142couponplace.setValue(coupon); 143couponplace2.setValue(coupon2); 144schoolplace.setValue(z_name); 145 146// シートの再描画,これで書き込み遅延を解消できるはず 147SpreadsheetApp.flush(); 148SpreadsheetApp.flush(); 149Utilities.sleep(1000); 150 151//pdf作成 152var 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"; 153var pdf = UrlFetchApp.fetch(url, {headers: {'Authorization': 'Bearer ' + token}}).getBlob().setName("伝票"+".pdf"); 154 155//pdf保存 156 var folder = DriveApp.getFolderById("1k1bXln-8wFDsDoqrEKWtWiToS36f5TGm"); 157 var file = folder.createFile(pdf); 158}else{ 159 continue; 160 } //check if done 161}//for終了 162}//終了 163 164

試したこと

Utilities.sleep(1000);を使って少し動作を遅らせてみましたが、スプレッドシート上の動作を見ていると反映は一瞬でされているのでそういうことではないようです。
また別のシートにimage関数で入れておいた画像をsetformulaで入れ直してみても同じことでした。
よろしくお願いします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問