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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

438閲覧

For文を利用して、SpreadSheetの同一セル内に連続で値を入力したい。

sora_DDD

総合スコア1

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2022/07/21 02:32

前提

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を使って動作を確認しましたが、変数自体はきちんと動いていました。
  • 手作業ではうまくいっていました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

createPdf()の直前に下記の1行を追加してみてください。

SpreadsheetApp.flush();

投稿2022/07/21 03:45

A00021

総合スコア128

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

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

sora_DDD

2022/07/22 01:06

ご教授いただいた内容で解決しました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問