質問編集履歴

1

webアプリ自体の説明とエラーが生じているスプレッドシートの画像を追加しました。

2022/07/11 11:01

投稿

NaokiUchid
NaokiUchid

スコア14

test CHANGED
File without changes
test CHANGED
@@ -4,11 +4,31 @@
4
4
 
5
5
  ### 発生している問題・エラーメッセージ
6
6
 
7
+ サンクスレポートとヒヤリハットレポートをGoogleフォームから入力し、入力されたものがスプレッドシートに記載されています。
8
+ このスプレッドシートの一部をウェブ状に表示しレポートを閲覧してもらうというのがwebアプリのベースです。
9
+ レポートを閲覧した際にポイントが入るように、レポート閲覧のボタンを押す際に名前をinputタブに入力すると、その入力された名前がnameReadセルに書き込まれていくという仕様をsteinを用いてスプレッドシートをデータベース化することでおこなっています。
10
+
11
+ inputの部分でnameのidをつけて入力されたものがnameReadセル(W列)、入力した際の時間がタイムスタンプセル(A列)に入力されるようにコードを書いています。
12
+
13
+ しかし、W列にタイムスタンプが入力され、
14
+
15
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-07-11/56fee610-53ed-477f-93be-044e32cd881f.png)
16
+
7
- nameReadセルにタイムスタンプが入力され、右に19マスずれた位置に名前が入力され
17
+ 右に19マスずれた位置(AS列)に名前(ここでは「氏名」と入力)が入力されます
18
+
19
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-07-11/50c1b08c-7889-4278-87c0-a2dbeb0f053e.png)
20
+
8
- さらに続けて入力すると先ほど名前が入力されたセルの真下にタイムスタンプが入力され、また右に19マスずれた位置に名前が入力され
21
+ さらに続けて入力すると先ほど名前が入力されたセルの真下にタイムスタンプが入力され、また右に19マスずれた位置に名前が入力されます
22
+
23
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-07-11/005ca843-677c-454b-b083-6f83cd1f4644.png)
24
+
25
+ 入力するたびに名前が入ったセルの下に時間が入力され、その19マスずれたところに名前が入力されていきます。
26
+
9
27
  Chromeの検証画面では特にエラーメッセージは表示されません。
10
28
 
11
29
  ### 該当のソースコード
30
+
31
+ サンクスレポートの閲覧画面
12
32
 
13
33
  ```html
14
34
  <!DOCTYPE html>
@@ -40,7 +60,7 @@
40
60
  <script src="https://unpkg.com/stein-js-client"></script>
41
61
  <script>
42
62
  const store = new SteinStore(
43
- "https://api.steinhq.com/v1/storages/XXXXXXXXXXX"
63
+ "https://api.steinhq.com/v1/storages/XXXXXXXXXX"
44
64
  );
45
65
 
46
66
  async function thx() {
@@ -73,7 +93,114 @@
73
93
 
74
94
  ```
75
95
 
96
+ ヒヤリハットレポート閲覧画面
97
+
98
+ ```html
99
+ <!DOCTYPE html>
100
+ <html lang="ja">
101
+ <head>
102
+ <meta charset="UTF-8" />
103
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
104
+ <meta http-equiv="X-UA-Compatible" content="ie=edge" />
105
+ <title>スマレポ</title>
106
+ <link rel="stylesheet" media="print" href="print.css" />
107
+ <link rel="shortcut icon" href="favicon.ico" />
108
+ <link
109
+ href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.4.1/font/bootstrap-icons.css"
110
+ rel="stylesheet"
111
+ />
112
+ <link href="./hyr.css" rel="stylesheet" />
113
+ </head>
114
+ <body>
115
+ <div class="container px-lg-5">
116
+ <h1 class="pt-3">ヒヤリハットレポート</h1>
117
+ <input
118
+ type="text"
119
+ id="name"
120
+ placeholder="氏名(スペース入れない)"
121
+ required
122
+ /><br />
123
+ <button onclick="hyr()">ヒヤリハットレポート表示</button>
124
+ </div>
125
+ <script src="https://unpkg.com/stein-js-client"></script>
126
+ <script>
127
+ const store = new SteinStore(
128
+ "https://api.steinhq.com/v1/storages/XXXXXXXXXX"
129
+ );
130
+
131
+ async function hyr() {
132
+ const data = await store.read("sheet1", { limit: 1000, offset: 0 });
133
+ console.dir(data);
134
+ console.log(" - - - - - - - - - - - ");
135
+ for (let i = data.length - 1; i >= 0; i--) {
136
+ const element = data[i];
137
+ const hyrdata = element.内容;
138
+ const hyrrp = element.発生時の対応;
139
+ const hyrreason = element.原因;
140
+ const hyrreact = element.今後の対応;
141
+ const hyrleader = element.上長のコメント;
142
+ const hyrdirector = element.院長のコメント;
143
+ console.log(hyrdata);
144
+ if (hyrdata !== null) {
145
+ const newDivhd = document.createElement("div");
146
+ const newContenthd = document.createTextNode("[内容]" + hyrdata);
147
+ newDivhd.appendChild(newContenthd);
148
+ var currentDivhd = document.getElementById("div1");
149
+ document.body.insertBefore(newDivhd, currentDivhd);
150
+ const newDivhr = document.createElement("div");
151
+ const newContenthr = document.createTextNode(
152
+ "[発生時の対応]" + hyrrp
153
+ );
154
+ newDivhr.appendChild(newContenthr);
155
+ var currentDivhr = document.getElementById("div1");
156
+ document.body.insertBefore(newDivhr, currentDivhr);
157
+ const newDivhn = document.createElement("div");
158
+ const newContenthn = document.createTextNode("[原因]" + hyrreason);
159
+ newDivhn.appendChild(newContenthn);
160
+ var currentDivhn = document.getElementById("div1");
161
+ document.body.insertBefore(newDivhn, currentDivhn);
162
+ const newDivct = document.createElement("div");
163
+ const newContentct = document.createTextNode(
164
+ "[今後の対応]" + hyrreact
165
+ );
166
+ newDivct.appendChild(newContentct);
167
+ var currentDivct = document.getElementById("div1");
168
+ document.body.insertBefore(newDivct, currentDivct);
169
+ const newDivle = document.createElement("div");
170
+ const newContentle = document.createTextNode(
171
+ "[上長のコメント]" + hyrleader
172
+ );
173
+ newDivle.appendChild(newContentle);
174
+ var currentDivle = document.getElementById("div1");
175
+ document.body.insertBefore(newDivle, currentDivle);
176
+ const newDivdi = document.createElement("div");
177
+ const newContentdi = document.createTextNode(
178
+ "[院長のコメント]" + hyrdirector
179
+ );
180
+ newDivdi.appendChild(newContentdi);
181
+ var currentDivdi = document.getElementById("div1");
182
+ document.body.insertBefore(newDivdi, currentDivdi);
183
+ const newDivmm = document.createElement("div");
184
+ const newContentmm = document.createTextNode("⭐️");
185
+ newDivmm.appendChild(newContentmm);
186
+ var currentDivmm = document.getElementById("div1");
187
+ document.body.insertBefore(newDivmm, currentDivmm);
188
+ }
189
+ }
190
+ await store.append("sheet1", [
191
+ {
192
+ nameRead: document.getElementById("name").value,
193
+ タイムスタンプ: new Date().toISOString(),
194
+ },
195
+ ]);
196
+ }
197
+ </script>
198
+ </body>
199
+ </html>
200
+ ```
201
+
76
202
  ### 試したこと
77
203
  簡易版(入力項目が一つしかないもの)を別で作成し表示部分以外は同じコードで作成したところ適切なセルに入力されました。
204
+
78
- stein側の問題れないとも考えています。
205
+ かし、別施設に導入してる似たコードにおいても、上記同様の入力部分がずれるバグが発生しています。
79
-
206
+