Q&A
前提
Google Apps Scriptを利用して、SpreadSheetの同一セル内に連続で値を入力したい。
実現したいこと
- Google Apps ScriptとGoogle SpreadSheetを使って、別シートからVLOOKUP関数で表引きをしてデータを連続的にpdf保存したい。
- 別シートでは1~40までの番号を割り振ってあり、固定キーとして設定してあるセルに数を入力すると、それに対応したデータを表示する。
【動作イメージ】
発生している問題・エラーメッセージ
処理をしているときに、値が入力されず、全体の処理が終わったら最後の値だけ入力されてしまう。なので、pdf保存は正常に動いているが、中身が全部同じになってしまっている。
該当のソースコード
GAS
1function savePdf(){ 2 //PフォルダID 3 let folderId = getFolderId(); 4 //スプレッドシートを取得する 5 let ss = SpreadsheetApp.getActiveSpreadsheet(); 6 let sheat=ss.getSheetByName('print'); 7 //スプレッドシートID 8 let ssId = ss.getId(); 9 //シートIDを取得する 10 let shId = ss.getActiveSheet().getSheetId(); 11 12 let rs = sheat.getRange("A3"); 13 let start=rs.getValue(); 14 15 let rf = sheat.getRange("B3"); 16 let finish=rf.getValue(); 17 18 let i=0; 19 20 Logger.log(finish); 21 22 for(i=start;i<=finish;i++){ 23 sheat.getRange("K2").setValue(i); 24 Utilities.sleep(10000); 25 26 //PDFのファイル 27 let fileName = i; 28 29 //関数createPdfを実行し、PDFを作成して保存する 30 createPdf(folderId, ssId, shId, fileName); 31 } 32} 33 34 35function createPdf(folderId, ssId, shId, fileName){ 36 //PDFを作成するためのベースとなるURL 37 let baseUrl = "https://docs.google.com/spreadsheets/d/" 38 + ssId 39 + "/export?gid=" 40 + shId; 41 //PDFのオプションを指定 42 let pdfOptions = "&exportFormat=pdf&format=pdf" 43 + "&size=A4" //用紙サイズ (A4) 44 + "&portrait=false" //用紙の向き true: 縦向き / false: 横向き 45 + "&fitw=true" //ページ幅を用紙にフィットさせるか true: フィットさせる / false: 原寸大 46 + "&top_margin=0.50" //上の余白 47 + "&right_margin=0.50" //右の余白 48 + "&bottom_margin=0.50" //下の余白 49 + "&left_margin=0.50" //左の余白 50 + "&horizontal_alignment=CENTER" //水平方向の位置 51 + "&vertical_alignment=TOP" //垂直方向の位置 52 + "&printtitle=false" //スプレッドシート名の表示有無 53 + "&sheetnames=false" //シート名の表示有無 54 + "&gridlines=false" //グリッドラインの表示有無 55 + "&fzr=false" //固定行の表示有無 56 + "&fzc=false" //固定列の表示有無; 57 58 59 //PDFを作成するためのURL 60 let url = baseUrl + pdfOptions; 61 62 //アクセストークンを取得する 63 let token = ScriptApp.getOAuthToken(); 64 65 //headersにアクセストークンを格納する 66 let options = { 67 headers: { 68 'Authorization': 'Bearer ' + token 69 } 70 }; 71 72 //PDFを作成する 73 let blob = UrlFetchApp.fetch(url, options).getBlob().setName(fileName + '.pdf'); 74 75 //PDFの保存先フォルダー 76 let folder = DriveApp.getFolderById(folderId); 77 78 //PDFを指定したフォルダに保存する 79 folder.createFile(blob); 80} 81 82
試したこと
- Logを使って動作を確認しましたが、変数自体はきちんと動いていました。
- 手作業ではうまくいっていました。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/07/22 01:06