質問編集履歴

1

1.問題が解決したと思っていたが、じつはwaitLock部分は、全く機能していないようだった。2.全コードを本文末尾に追加。

2022/03/22 23:05

投稿

yoichiyy
yoichiyy

スコア55

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
  2の処理を実行してもらいたいと考え、
9
9
 
10
10
  1と2の間に、下記コードを、どこかのWEBサイトから拾ってきて(注1)挿入しました。
11
- すると問題が解決しました。
11
+ ・・・が、まったく挙動は変わりませんでした。
12
12
 
13
13
  ```googleAppScript
14
14
  // Get a script lock, because we're about to modify a shared resource.
@@ -31,4 +31,63 @@
31
31
  どうぞ、よろしくお願いします。
32
32
 
33
33
 
34
+ ```すべてのコードはこちらです。
35
+ function up_to_firestore() {
36
+ var ss = SpreadsheetApp.getActiveSpreadsheet();
37
+ var sheet1 = ss.getSheetByName('kaitou1');
38
+
39
+ //《タイトル行取得部分》
40
+ var firstRange = sheet1.getRange(2, 5, 1,7);
41
+ var firstRowValues = firstRange.getValues();
42
+ var titleColumns = firstRowValues[0];
43
+
44
+ //回答データ取得
45
+ var sheetData = sheet1.getSheetValues(3, 5, sheet1.getLastRow(), 7);
46
+
47
+ //ループ開始
48
+ sheetData.forEach(function(value, index) {
49
+ // 済による分岐
50
+ if (value[0] !="" && value[6] !="済") {
51
+ sheet1.getRange(3+index, 11).setValue("済");
52
+ sheet1.getRange(2+index,9,1,2).copyTo(sheet1.getRange(3+index,9,1,2));
53
+
54
+ // コピー処理終わるまで待機させる・・・つもりが、
55
+ var lock = LockService.getScriptLock();
56
+ // Wait for up to 30 seconds for other processes to finish.
57
+ lock.waitLock(30000);
58
+ if (!lock.hasLock()) {
59
+ Logger.log('Could not obtain lock after 10 seconds.');
60
+ }
61
+
62
+ //その行データをrowValuesに入れる
63
+ var rowValues = sheetData[index];
64
+
65
+ //JSONArrayつくる
66
+ var jsonArray = [];
67
+ var json = new Object();
68
+ for(var j=0; j<titleColumns.length; j++) {
69
+ json[titleColumns[j]] = rowValues[j];
70
+ }
71
+ jsonArray.push(json);
72
+
73
+
74
+ // CloudFirestoreの認証とUP
75
+ var firestore = firestoreData();
76
+
77
+ try{
78
+ firestore.createDocument(●●●, jsonArray);
79
+ }catch(e){
80
+ Logger.log("エラー:" + e.message)//同じドキュメント名が合った場合は、新しい方にデータを更新
81
+ firestore.updateDocument(●●●, jsonArray);
82
+ }
83
+
84
+ }
85
+ });
86
+
87
+ }
88
+
89
+
90
+ ```
91
+
92
+
34
93
  注1:1年以上前に、ネットで探して拾ったコードなので、URL情報をご提供できません…。