回答編集履歴

2

修正

2024/01/17 13:24

投稿

退会済みユーザー
test CHANGED
@@ -54,16 +54,19 @@
54
54
  var data = sheet.getRange('A2:D').getValues();
55
55
 
56
56
  // 受付No.に対応する行を検索
57
+ // スプレッドシートに書き込み
58
+ function updateSheet(report_no,date,company,contents) {
59
+ var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('営業報告');
60
+ var data = sheet.getRange('A2:D').getValues();
61
+
62
+ // 受付No.に対応する行を検索
57
63
  for (var row = 0; row < data.length; row++) {
58
- // A列が同じreprt_noならその列を更新
64
+ // A列が同じreport_noなら更新 または 空白ならば追加
59
- if (data[row][0] === report_no) {
65
+ if (data[row][0] === report_no || data[row][0] === "") {
60
- data[row] = [report_no,date,company,contents];
61
- sheet.getRange(row + 2, 1, 1, data[row].length).setValues([data[row]]);
66
+ sheet.getRange(row + 2, 1, 1, data[row].length).setValues([[report_no,date,company,contents]]);
62
- break; // 更新が完了したループ抜ける
67
+ break; // 目的を達したのでループから抜ける
63
- } else if(data[row][0] === "") { // A列が空欄=どの列とも一致しなかった=新規データ
68
+ }
64
- data[row] = [report_no,date,company,contents];
69
+ // 同じreport_noが見つかるか、空白になるまでループ。
65
- sheet.getRange(row + 2, 1, 1, data[row].length).setValues([data[row]]);
66
- break; // 追加が完了したらループを抜ける
67
70
  }
68
71
  }
69
72
  ```

1

fic

2024/01/17 13:16

投稿

退会済みユーザー
test CHANGED
@@ -10,6 +10,8 @@
10
10
  BはdoPostを呼び出しません。
11
11
  この事実、「新規作成」という言葉、そして「末尾に追加されてしまう」という状況から推測すると、**doPost の中にある 「 //[新規フォーム処理 省略]」が悪さしてるとしか考えられません。**
12
12
  (ここまでたどり着くのにコード読みながら 5秒くらいかかりました)
13
+
14
+ まあ、本当のところは省略されてるのでわかりませんが。
13
15
 
14
16
  多分ですが「HTMLから渡された report_no を スプレッドシートのA列のデータと比較して、どの行の A列の値とも異なっていれば末尾行に追加」みたいなコードを書かれたんでしょうけれど、その中にバグがあって、本来末尾に追記してはいけないのに追記してしまうようなアルゴリズムになってると思われます。
15
17
  (つまり二重送信でもなんでもなくて、単なる制御ミス)