javascriptの処理が非同期処理なためGASの処理が終わる前に次にいき上手く処理が回りません。
これを上手く処理が流れるようにJavascruiptとGASを同期処理させたいです。
●具体的な内容
javascriptの変数をGoogleスプレッドシートのセルに反映させたい。
javascript
1for(i = 0; i < 10; i++){ 2 3new Promise((resolve) => { 4google.script.run 5.write(str);//////ここでは省略していますが、strは変数で+iで変更される様にしています。 6}, 1000); 7} 8
GASの方で繰り返しで送られてくる変数を4行目の下に追加していく流れです。
GAS
1function write(aa) { 2 var sheet = openSheet(); 3//最終行を取得 4 var maxRng_nyusyuko = sheet.getRange(sheet.getMaxRows(), 4); 5 6 var lastRng_nyusyuko = maxRng_nyusyuko.getNextDataCell(SpreadsheetApp.Direction.UP); 7 Logger.log(lastRng_nyusyuko.getA1Notation()); 8 9//最終行のセルをアクティブ化して、一個下のセルに情報を追加 10 const range_nyusyuko = sheet.getRange(lastRng_nyusyuko.getA1Notation()); 11 range_nyusyuko.offset(0, 0).activate(); 12 13 let activeCell_nyusyuko = sheet.getActiveCell(); 14 let selectedRow_nyusyuko = activeCell_nyusyuko.getRow(); 15 let selectedColumn_nyusyuko = activeCell_nyusyuko.getColumn(); 16 sheet.getRange(selectedRow_nyusyuko+1, selectedColumn_nyusyuko).setValue([aa]) 17resolve(); 18}
この処理流すと、javascriptの非同期なためGASのコードが回るきる前に次の変数を渡しセルの数や順番がごちゃごちゃになります。
試したこと
・待機時間を設ける → 意味なし。状況に変化なし
・Promiseを用いる → resolve();をGAS側に付けるとエラー Uncaught at aa
回答2件
あなたの回答
tips
プレビュー