teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

情報の追加

2021/12/28 02:31

投稿

aRyo
aRyo

スコア23

title CHANGED
File without changes
body CHANGED
@@ -1,34 +1,4 @@
1
- javascriptの処理が早すぎてGASの処理が終わる前に次にいき上手く処理が回りません。
2
-
3
- ●具体的な内容
4
- javascriptの変数をGoogleスプレッドシートのセルに反映させたい。
5
- ```javascript
6
- for(i = 0; i < 10; i++){
7
- google.script.run
8
- .write(str);//////ここでは省略していますが、strは変数で+iで変更される様にしています。
9
- }
10
- ```
11
-
12
- GASの方で繰り返しで送られてくる変数を4行目の下に追加していく流れです。
13
- ```GAS
14
- function write(aa) {
15
- var sheet = openSheet();
16
- //最終行を取得
17
- var maxRng_nyusyuko = sheet.getRange(sheet.getMaxRows(), 4);
18
-
19
- var lastRng_nyusyuko = maxRng_nyusyuko.getNextDataCell(SpreadsheetApp.Direction.UP);
20
- Logger.log(lastRng_nyusyuko.getA1Notation());
21
-
22
- //最終行のセルをアクティブ化して、一個下のセルに情報を追加
23
- const range_nyusyuko = sheet.getRange(lastRng_nyusyuko.getA1Notation());
24
- range_nyusyuko.offset(0, 0).activate();
25
-
26
-  let activeCell_nyusyuko = sheet.getActiveCell();
27
-  let selectedRow_nyusyuko = activeCell_nyusyuko.getRow();
28
-  let selectedColumn_nyusyuko = activeCell_nyusyuko.getColumn();
29
-  sheet.getRange(selectedRow_nyusyuko+1, selectedColumn_nyusyuko).setValue([aa])
30
- }
31
- ```javascriptの処理が非同期処理なためGASの処理が終わる前に次にいき上手く処理が回りません。
1
+ javascriptの処理が非同期処理なためGASの処理が終わる前に次にいき上手く処理が回りません。
32
2
  これを上手く処理が流れるようにJavascruiptとGASを同期処理させたいです。
33
3
 
34
4
  ●具体的な内容

2

情報の追加

2021/12/28 02:31

投稿

aRyo
aRyo

スコア23

title CHANGED
@@ -1,1 +1,1 @@
1
- javascriptの処理が早すぎて困っています。
1
+ javascriptの処理が非同期なため困っています。
body CHANGED
@@ -70,10 +70,4 @@
70
70
 
71
71
  **試したこと**
72
72
  ・待機時間を設ける → 意味なし。状況に変化なし
73
- ・Promiseを用いる → resolve();をGAS側に付けるとエラー Uncaught at aa
73
+ ・Promiseを用いる → resolve();をGAS側に付けるとエラー Uncaught at aa
74
-
75
-
76
-
77
- この処理流すと、javascriptの処理が早すぎてGASのコードが回るきる前に次の変数を渡しセルの数や順番がごちゃごちゃになります。
78
-
79
- ここでjavascriptの処理をGASが回りきるまで待機などさせたいのですが、良い方法ありますでしょうか?

1

情報追加

2021/12/28 02:20

投稿

aRyo
aRyo

スコア23

title CHANGED
File without changes
body CHANGED
@@ -28,8 +28,52 @@
28
28
   let selectedColumn_nyusyuko = activeCell_nyusyuko.getColumn();
29
29
   sheet.getRange(selectedRow_nyusyuko+1, selectedColumn_nyusyuko).setValue([aa])
30
30
  }
31
+ ```javascriptの処理が非同期処理なためGASの処理が終わる前に次にいき上手く処理が回りません。
32
+ これを上手く処理が流れるようにJavascruiptとGASを同期処理させたいです。
33
+
34
+ ●具体的な内容
35
+ javascriptの変数をGoogleスプレッドシートのセルに反映させたい。
36
+ ```javascript
37
+ for(i = 0; i < 10; i++){
38
+
39
+ new Promise((resolve) => {
40
+ google.script.run
41
+ .write(str);//////ここでは省略していますが、strは変数で+iで変更される様にしています。
42
+ }, 1000);
43
+ }
44
+
31
45
  ```
32
46
 
47
+ GASの方で繰り返しで送られてくる変数を4行目の下に追加していく流れです。
48
+ ```GAS
49
+ function write(aa) {
50
+ var sheet = openSheet();
51
+ //最終行を取得
52
+ var maxRng_nyusyuko = sheet.getRange(sheet.getMaxRows(), 4);
53
+
54
+ var lastRng_nyusyuko = maxRng_nyusyuko.getNextDataCell(SpreadsheetApp.Direction.UP);
55
+ Logger.log(lastRng_nyusyuko.getA1Notation());
56
+
57
+ //最終行のセルをアクティブ化して、一個下のセルに情報を追加
58
+ const range_nyusyuko = sheet.getRange(lastRng_nyusyuko.getA1Notation());
59
+ range_nyusyuko.offset(0, 0).activate();
60
+
61
+  let activeCell_nyusyuko = sheet.getActiveCell();
62
+  let selectedRow_nyusyuko = activeCell_nyusyuko.getRow();
63
+  let selectedColumn_nyusyuko = activeCell_nyusyuko.getColumn();
64
+  sheet.getRange(selectedRow_nyusyuko+1, selectedColumn_nyusyuko).setValue([aa])
65
+ resolve();
66
+ }
67
+ ```
68
+
69
+ この処理流すと、javascriptの非同期なためGASのコードが回るきる前に次の変数を渡しセルの数や順番がごちゃごちゃになります。
70
+
71
+ **試したこと**
72
+ ・待機時間を設ける → 意味なし。状況に変化なし
73
+ ・Promiseを用いる → resolve();をGAS側に付けるとエラー Uncaught at aa
74
+
75
+
76
+
33
77
  この処理流すと、javascriptの処理が早すぎてGASのコードが回るきる前に次の変数を渡しセルの数や順番がごちゃごちゃになります。
34
78
 
35
79
  ここでjavascriptの処理をGASが回りきるまで待機などさせたいのですが、良い方法ありますでしょうか?