質問編集履歴

1

詳しく訂正しました。

2019/08/29 21:00

投稿

menbou14
menbou14

スコア17

test CHANGED
File without changes
test CHANGED
@@ -1,5 +1,355 @@
1
1
  グーグルスプレッドで表を出力しようとすると、「TypeError: undefined のメソッド「toString」を呼び出せません。」と出ます。
2
2
 
3
+
4
+
5
+ 詳しく書くと、まずグーグルスプレッドで表を作ります。
6
+
7
+
8
+
9
+ そして、「ツール」>「スクリプトエディタ」を開きます。
10
+
11
+ そこへ、以下のコードをコピペしました。
12
+
13
+ ```scrpit
14
+
15
+ // テーブルタグ作成関数を実行(セル結合あり)
16
+
17
+
18
+
19
+ // テーブルタグ作成関数を実行(横並び)
20
+
21
+ function runCreateTableTag() {
22
+
23
+ createTableTag(1);
24
+
25
+ }
26
+
27
+
28
+
29
+ // テーブルタグ作成関数を実行(縦並び)
30
+
31
+ function runCreateTableTagTate() {
32
+
33
+ createTableTag(2);
34
+
35
+ }
36
+
37
+
38
+
39
+
40
+
41
+ // テーブルタグ作成関数
42
+
43
+ function createTableTag(margeFlg) {
44
+
45
+ var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // アクティブシート
46
+
47
+ var range = sheet.getDataRange(); // データのある範囲
48
+
49
+ var numRows = range.getNumRows(); // データのある行数
50
+
51
+ var numCols = range.getNumColumns(); // データのある列数
52
+
53
+ var cells = range.getValues(); // データの配列
54
+
55
+ var tableTag = '';
56
+
57
+ var tableHead = '<table class="dsc2item col4" cellspacing="1">\n<tbody>\n';
58
+
59
+ var tableHead2 = '<table class="dsc2item col4" cellspacing="1" style="margin-bottom: 15px">\n<tbody>\n';
60
+
61
+ var arrayTH = [];
62
+
63
+
64
+
65
+ // テーブルタグ
66
+
67
+ roopline: for(var i = 0; i < numRows; i++){
68
+
69
+ var rowTag = "";
70
+
71
+
72
+
73
+ // 縦並び用の処理
74
+
75
+ if(margeFlg == 2){
76
+
77
+ rowTag = tableHead2 + "<tr>";
78
+
79
+ }else{
80
+
81
+ if(i == 0){
82
+
83
+ tableTag = tableHead;
84
+
85
+ }
86
+
87
+ rowTag = "<tr>";
88
+
89
+ }
90
+
91
+
92
+
93
+ for(var j = 0; j < numCols; j++){
94
+
95
+ if(j == 3){ continue; }
96
+
97
+ var margeString = "";
98
+
99
+
100
+
101
+ // 背景色でタグを設定
102
+
103
+ var cellTag = "";
104
+
105
+ if(range.getBackgroundColors()[i][j] === "#ffffff"){ // セルの背景が白色の場合 *配列は行、列の順
106
+
107
+ cellTag = "td"
108
+
109
+ }else{
110
+
111
+ cellTag = 'td style="background-color:' + range.getBackgroundColors()[i][j] + '"';
112
+
113
+ }
114
+
115
+
116
+
117
+ // 縦並び用の処理
118
+
119
+ if(margeFlg == 2){
120
+
121
+ if(i == 0){
122
+
123
+ for(var x = 0; x < numCols; x++){
124
+
125
+ var Head = '';
126
+
127
+ Head = cells[i][x].toString().replace(/\n/g, "<br>") + "</td>";
128
+
129
+ arrayTH[x] = "<" + cellTag + ' style="max-width: 200px">' + Head;
130
+
131
+ }
132
+
133
+ rowTag = '';
134
+
135
+ continue roopline;
136
+
137
+ }else if(i >= 1){
138
+
139
+ if(j >= 1){
140
+
141
+ rowTag += "<tr>" + arrayTH[j];
142
+
143
+ }else{
144
+
145
+ rowTag += arrayTH[j];
146
+
147
+ }
148
+
149
+ }
150
+
151
+ }
152
+
153
+
154
+
155
+
156
+
157
+ rowTag += "<" + cellTag + margeString; // セルの結合も設定
158
+
159
+
160
+
161
+ // 文字寄せ
162
+
163
+ var alignString = range.getHorizontalAlignments()[i][j].replace("general-", "");
164
+
165
+ switch(alignString){ // *配列は行、列の順
166
+
167
+ case "center":
168
+
169
+ case "right":
170
+
171
+ rowTag += ' align="' + alignString + '"';
172
+
173
+ break;
174
+
175
+ }
176
+
177
+ rowTag += ">";
178
+
179
+
180
+
181
+ // 縦並び用の処理
182
+
183
+ if(margeFlg == 2){
184
+
185
+
186
+
187
+ if(j ==1 && i >= 1){
188
+
189
+ var str = cells[i][j].toString().replace(/\n/g, "<br>");
190
+
191
+ if(!str){
192
+
193
+ rowTag += "-</" + cellTag + ">\n";
194
+
195
+ }else{
196
+
197
+ rowTag += '<a href="tel:' + str + '">' + str + '</a>' + "</td>\n";
198
+
199
+ }
200
+
201
+ }
202
+
203
+ else if(j==0 && i >= 1){
204
+
205
+ var companyName = cells[i][j].toString().replace(/\n/g, "<br>");
206
+
207
+ var url = cells[i][3].toString().replace(/\n/g, "<br>");
208
+
209
+ if(!url){
210
+
211
+ rowTag += companyName + "</td>\n";
212
+
213
+ }else{
214
+
215
+ rowTag += '<a href="' + url + '" rel="nofollow" target="_blank">' + companyName + '</a>' + "</td>\n";
216
+
217
+ }
218
+
219
+ }
220
+
221
+ else{
222
+
223
+ rowTag += cells[i][j].toString().replace(/\n/g, "<br>") + "</td>\n";
224
+
225
+ }
226
+
227
+ rowTag += "</tr>\n";
228
+
229
+
230
+
231
+ }else{
232
+
233
+ // 改行を変換
234
+
235
+ if(j ==1 && i >= 1){
236
+
237
+ var str = cells[i][j].toString().replace(/\n/g, "<br>");
238
+
239
+ if(!str){
240
+
241
+ rowTag += "-</" + cellTag + ">\n";
242
+
243
+ }else{
244
+
245
+ rowTag += '<a href="tel:' + str + '">' + str + '</a>' + "</td>\n";
246
+
247
+ }
248
+
249
+ }
250
+
251
+ else if(j==0 && i >= 1){
252
+
253
+ var companyName = cells[i][j].toString().replace(/\n/g, "<br>");
254
+
255
+ var url = cells[i][3].toString().replace(/\n/g, "<br>");
256
+
257
+ if(!url){
258
+
259
+ rowTag += companyName + "</td>\n";
260
+
261
+ }else{
262
+
263
+ rowTag += '<a href="' + url + '" rel="nofollow" target="_blank">' + companyName + '</a>' + "</td>\n";
264
+
265
+ }
266
+
267
+ }
268
+
269
+ else{
270
+
271
+ rowTag += cells[i][j].toString().replace(/\n/g, "<br>") + "</td>\n";
272
+
273
+ }
274
+
275
+ }
276
+
277
+ }
278
+
279
+
280
+
281
+ if(margeFlg == 1){
282
+
283
+ rowTag +="</tr>\n";
284
+
285
+ tableTag += rowTag;
286
+
287
+ }else{
288
+
289
+ tableTag += rowTag + "</tbody>\n</table>\n\n";
290
+
291
+ }
292
+
293
+ }
294
+
295
+
296
+
297
+ if(margeFlg == 1){
298
+
299
+ tableTag += "</tbody>\n</table>";
300
+
301
+ }
302
+
303
+
304
+
305
+ Browser.msgBox(tableTag); // メッセージボックスにテーブルタグ出力
306
+
307
+ }
308
+
309
+
310
+
311
+ // シートの書式・値を全削除
312
+
313
+ function clearSheet() {
314
+
315
+ SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().clear(); // アクティブシートをクリア
316
+
317
+ }
318
+
319
+
320
+
321
+ // スプレッドシートのメニューに追加
322
+
323
+ function onOpen(){
324
+
325
+ var ssheet = SpreadsheetApp.getActiveSpreadsheet();
326
+
327
+ var menu = [{name: '横並び', functionName: 'runCreateTableTag'},
328
+
329
+ {name: '縦並び', functionName: 'runCreateTableTagTate'},
330
+
331
+ ];
332
+
333
+ ssheet.addMenu('テーブルタグ作成', menu);
334
+
335
+     menu = [{name: '実行', functionName: 'clearSheet'},
336
+
337
+  ];
338
+
339
+ ssheet.addMenu('シートをクリア', menu);
340
+
341
+ }
342
+
343
+
344
+
345
+ ```
346
+
347
+
348
+
349
+ その後、元のシートに戻り「テーブルタグの作成」でテーブルタグを出力しようとしているのですが、「TypeError: undefined のメソッド「toString」を呼び出せません。」と出ます。
350
+
351
+
352
+
3
353
  対処の仕方のわかる方、どうすればいいか教えて下さい。
4
354
 
5
355
  よろしくお願いします。