質問編集履歴
1
webアプリ自体の説明とエラーが生じているスプレッドシートの画像を追加しました。
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
|
+

|
16
|
+
|
7
|
-
|
17
|
+
右に19マスずれた位置(AS列)に名前(ここでは「氏名」と入力)が入力されます。
|
18
|
+
|
19
|
+

|
20
|
+
|
8
|
-
さらに続けて入力すると先ほど名前が入力されたセルの真下にタイムスタンプが入力され、また右に19マスずれた位置に名前が入力され
|
21
|
+
さらに続けて入力すると先ほど名前が入力されたセルの真下にタイムスタンプが入力され、また右に19マスずれた位置に名前が入力されます。
|
22
|
+
|
23
|
+

|
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/XXXXXXXXXX
|
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
|
-
|
205
|
+
しかし、別施設に導入している似たコードにおいても、上記と同様の入力部分がずれるバグが発生しています。
|
79
|
-
|
206
|
+
|