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

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

新規登録して質問してみよう
ただいま回答率
85.44%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

402閲覧

【GAS】imputBoxで取得した値が指定されたセルに反映されない or 処理が遅い?

Yam_Fu

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2023/03/04 00:49

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • imputBoxで取得した情報をプログラムの処理の中で指定されたセルに反映させたい。(=PDF化処理される前に反映させたい)

前提

ここに質問の内容を詳しく書いてください。
(例)
GASでデータ保存用にスプレッドシートのファイルをPDF化してフォルダに保存するシステムを作っています。
その際にimputBoxを用いて担当者氏名を入力後、その氏名をスプレッドシートに反映させて後にPDF化する処理を構築したはずなのですが、なぜか氏名が反映されないままPDF化の処理が先に実行されてしまいます。

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

特にエラーにはなっていませんが何が問題かわからない状況です。。。

該当のソースコード

function Manual_CreatePdf_XXX() { var popUp = Browser.msgBox("XXX保存","XXXを保存(PDF形式)しますか?\\n間違って起動した場合、キャンセルをクリックしてください。",Browser.Buttons.OK_CANCEL); if(popUp == "cancel"){ Browser.msgBox("スクリプトを終了します。\\n保存作業をキャンセルしました。"); return; } else { var ShiftManagerName = Browser.inputBox("責任者氏名","本日の責任者の氏名を入力して下さい。",Browser.Buttons.OK_CANCEL); if(ShiftManagerName == "cancel"){ Browser.msgBox("スクリプトを終了します。\\n保存作業をキャンセルしました。"); return; } else { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName(sheetName); var range = sheet.getRange(2, 19); range.setValue(ShiftManagerName); var ssId = ss.getId(); var shId = sheet.getSheetId(); var token = ScriptApp.getOAuthToken(); var date = new Date(); var today = Utilities.formatDate(date, "Asia/Tokyo", "yyyyMMdd_HHmmss"); var day = date.getDate(); date.setDate(day-1); var yesterday = Utilities.formatDate(date, "Asia/Tokyo", "yyyyMMdd_HHmmss"); var baseUrl   = "https://docs.google.com/spreadsheets/d/" + ssId + "/export?gid=" + shId; var pdfOptions = "&exportFormat=pdf&format=pdf" + "&size=A4" + "&portrait=true" + "&fitw=true" + "&top_margin=0.30" + "&right_margin=0.30" + "&bottom_margin=0.30" + "&left_margin=0.30" + "&horizontal_alignment=CENTER" + "&vertical_alignment=TOP" + "&printtitle=false" + "&sheetnames=false" + "&sheetnames==true" + "&note=false" + "&pagenum=RIGHT" + "&printnotes=false" var url = baseUrl + pdfOptions; var options = {headers: {'Authorization': 'Bearer ' + token}}; var blob = UrlFetchApp.fetch(url, options).getBlob() .setName(FileName + "_" + sheetName + "_" + yesterday + ".pdf"); var folder = DriveApp.getFolderById(FolderId_XXX); folder.createFile(blob); Logger.log("PDF(XXX)が作成されました"); var staySecond = 5 Utilities.sleep(staySecond * 1000); Browser.msgBox("指定のフォルダにXXXのPDFを作成しました。\\n指定フォルダ内にデータが保存されていることを確認して下さい。")    // 完了通知 range.clearContent(); } } }

試したこと

・プログラム自体は正常に動作しているのにデータ内の書き込みの処理が遅いだけかと思い「Utilities.sleep(staySecond * 1000); 」をsetvalueの下の行に挿入してみたが変化なし。
・imputBoxをui.promptで作成したプログラムに変更して実施。結果変化なし。
・それぞれを別のfunctionとして切り分けて別のfunction内で同時実行してみたが結果変化なし。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

range.setValue(ShiftManagerName);
の下に
SpreadsheetApp.flush();
を追加してみてはいかがでしょうか。

js

1function Manual_CreatePdf_XXX() { 2 3 var popUp = Browser.msgBox("XXX保存","XXXを保存(PDF形式)しますか?\\n間違って起動した場合、キャンセルをクリックしてください。",Browser.Buttons.OK_CANCEL); 4 5 if(popUp == "cancel"){ 6 Browser.msgBox("スクリプトを終了します。\\n保存作業をキャンセルしました。"); 7 return; 8 9 } else { 10 11 var ShiftManagerName = Browser.inputBox("責任者氏名","本日の責任者の氏名を入力して下さい。",Browser.Buttons.OK_CANCEL); 12 if(ShiftManagerName == "cancel"){ 13 Browser.msgBox("スクリプトを終了します。\\n保存作業をキャンセルしました。"); 14 return; 15 16 } else { 17 18 var ss = SpreadsheetApp.getActiveSpreadsheet(); 19 var sheet = ss.getSheetByName(sheetName); 20 var range = sheet.getRange(2, 19); 21 range.setValue(ShiftManagerName); 22 SpreadsheetApp.flush(); // 追加 23 var ssId = ss.getId(); 24 var shId = sheet.getSheetId(); 25 var token = ScriptApp.getOAuthToken(); 26 var date = new Date(); 27 var today = Utilities.formatDate(date, "Asia/Tokyo", "yyyyMMdd_HHmmss"); 28 var day = date.getDate(); 29 date.setDate(day-1); 30 var yesterday = Utilities.formatDate(date, "Asia/Tokyo", "yyyyMMdd_HHmmss"); 31 var baseUrl   = "https://docs.google.com/spreadsheets/d/" + ssId + "/export?gid=" + shId; 32 33 var pdfOptions 34 = "&exportFormat=pdf&format=pdf" 35 + "&size=A4" 36 + "&portrait=true" 37 + "&fitw=true" 38 + "&top_margin=0.30" 39 + "&right_margin=0.30" 40 + "&bottom_margin=0.30" 41 + "&left_margin=0.30" 42 + "&horizontal_alignment=CENTER" 43 + "&vertical_alignment=TOP" 44 + "&printtitle=false" 45 + "&sheetnames=false" 46 + "&sheetnames==true" 47 + "&note=false" 48 + "&pagenum=RIGHT" 49 + "&printnotes=false" 50 51 var url = baseUrl + pdfOptions; 52 var options = {headers: {'Authorization': 'Bearer ' + token}}; 53 var blob = UrlFetchApp.fetch(url, options).getBlob() 54 .setName(FileName + "_" + sheetName + "_" + yesterday + ".pdf"); 55 56 var folder = DriveApp.getFolderById(FolderId_XXX); 57 folder.createFile(blob); 58 Logger.log("PDF(XXX)が作成されました"); 59 60 var staySecond = 5 61 Utilities.sleep(staySecond * 1000); 62 63 Browser.msgBox("指定のフォルダにXXXのPDFを作成しました。\\n指定フォルダ内にデータが保存されていることを確認して下さい。")    // 完了通知 64 65 range.clearContent(); 66 67 } 68 } 69}

投稿2023/03/04 02:09

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Yam_Fu

2023/03/04 16:02

ありがとうございます。 回答いただいた文を差し込みしたところこちらが思っていた通りに動作しました。 flushuをネットで検索したところGASの新たなロジックを知ることができとても勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問