回答編集履歴
7
修正
answer
CHANGED
@@ -20,31 +20,85 @@
|
|
20
20
|
|
21
21
|
--------------
|
22
22
|
|
23
|
-
|
23
|
+
エラーメッセージより、関数に渡された引数がsplit関数を持っていない、ということではないかと推測しました。
|
24
24
|
|
25
|
-
そこでf7conv関数の冒頭で
|
26
|
-
`Logger.log(typeof string)`
|
27
|
-
を打ってログを見てみると、objectと表示されました。
|
28
|
-
|
29
|
-
また、queryが返す型を調べるため、スプレッドシート上のシート1のA2セルに試しに
|
30
|
-
`=TYPE(query('フォームの回答 1'!$A$2:$BO,"select ("&SUBSTITUTE(ADDRESS(1,match(K1,'フォームの回答 1'!$A$1:$BO$1,0),4),1,)&")"))`
|
25
|
+
そこで、queryが返す型を調べるため、スプレッドシート上のシート1のA2セルに試しに`=TYPE(query('フォームの回答 1'!$A$2:$BO,"select ("&SUBSTITUTE(ADDRESS(1,match(K1,'フォームの回答 1'!$A$1:$BO$1,0),4),1,)&")"))`
|
31
26
|
と入力したところ、
|
32
27
|
「64」と表示されました。
|
33
28
|
|
34
29
|
ヘルプを見ると、64は「配列」を意味するので、query関数は配列を返すようですね、
|
35
30
|
|
36
|
-
つまりf7conv関数は、文字列ではなく配列を受け取っており、それを直接splitしようとしてるので
|
31
|
+
つまりf7conv関数は、文字列ではなく配列を受け取っており、それを直接splitしようとしてるのでエラーになるのでは。
|
37
32
|
|
38
|
-
したがって、f7conv関数で引数から文字列を取り出して処理すればいいのではないか、と思いました。。
|
39
33
|
|
34
|
+
たとえば、GoogleスプレッドシートのK2セル以降に下記のように記録された場合・・・
|
35
|
+
```GoogleSpread
|
40
|
-
|
36
|
+
[K列]
|
37
|
+
1行目 質問12
|
38
|
+
2行目 アイウエオ
|
39
|
+
3行目 カキクケコ
|
40
|
+
4行目 サシスセソ
|
41
41
|
```
|
42
|
+
|
42
|
-
|
43
|
+
f7conv( )関数に渡される、`query('フォームの回答 ~~)`という数式は、
|
43
|
-
|
44
|
+
下記のような形式の配列となります。
|
45
|
+
|
46
|
+
```GAS
|
44
|
-
|
47
|
+
[["アイウエオ"],["カキクケコ"],["サシスセソ"]]
|
45
|
-
(以下略)
|
46
48
|
```
|
47
49
|
|
50
|
+
したがって、f7conv( )関数は、この渡された配列を、全角の形式に直し
|
51
|
+
```
|
52
|
+
[["アイウエオ"],["カキクケコ"],["サシスセソ"]]
|
53
|
+
```
|
54
|
+
の形で返す関数にすればよいはずです。
|
55
|
+
|
56
|
+
|
57
|
+
具体的には下記のコードになります。
|
58
|
+
```
|
59
|
+
function f7conv(texts) {
|
60
|
+
//最終的に返す配列を定義
|
61
|
+
var textlist = [];
|
62
|
+
//配列からセル1つ1つを取り出して処理する。
|
63
|
+
for (var n in texts){
|
64
|
+
result = '';
|
65
|
+
_string = texts[n];
|
66
|
+
|
67
|
+
//変換する対象文字列をセット
|
68
|
+
var input = hankata;
|
69
|
+
var output = zenkata;
|
70
|
+
|
71
|
+
//引数で渡された文字を分割
|
72
|
+
var text = _string[0].split('');
|
73
|
+
|
74
|
+
//文字を再格納する配列を定義
|
75
|
+
var array = [];
|
76
|
+
//分割した文字の数だけループを回し、もし濁点・半濁点だった場合は1つ前の配列の中身とセットにして array に格納
|
77
|
+
for (var i = 0; i < text.length; i++) {
|
78
|
+
if (text[i] == "゙" || text[i] == "゚") {
|
79
|
+
array[array.length - 1] = (text[i - 1] + text[i]);
|
80
|
+
} else {
|
81
|
+
array.push(text[i]);
|
82
|
+
}
|
83
|
+
}
|
84
|
+
|
85
|
+
//再格納した文字の数だけループを回し、もし半角カナがあったら全角カナに直して result へ格納
|
86
|
+
for (var j = 0; j < array.length; j++) {
|
87
|
+
var index = input.indexOf(array[j]);
|
88
|
+
if (index == -1) {
|
89
|
+
result = result + array[j];
|
90
|
+
} else {
|
91
|
+
result = result + output[index];
|
92
|
+
}
|
93
|
+
}
|
94
|
+
//全角変換後の文字列を配列に格納する。
|
95
|
+
textlist.push([result])
|
96
|
+
}
|
97
|
+
//変換後の文字列を格納した配列を返す
|
98
|
+
return textlist;
|
99
|
+
}
|
100
|
+
```
|
101
|
+
|
48
102
|
とすればエラーはなくなると思います。
|
49
103
|
|
50
104
|
繰り返しになりますが**実行する際の詳細が明らかにされておらず、実行環境が異なるかもしれないので、上記のようにコードを直したとしても質問者さんのご希望に沿う動作になるとは限らないことをご了承ください。**
|
6
修正
answer
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
4.メニューの「ツール」→「スクリプトエディタ」で、質問中のスクリプトをコピーして保存する。
|
15
15
|
|
16
16
|
5.「フォームの回答 1」のK1セルに、適当に項目名を入力する。
|
17
|
-
6.「フォームの回答 1」のK2セルに、適当に**半角カナ
|
17
|
+
6.「フォームの回答 1」のK2セルに、適当に**半角カナを含む値(たとえば「アイウエオカキクコABCD」)**を入力する。
|
18
18
|
|
19
19
|
すると、「シート1」ではA1セルが#Error表示になり、エラーセルにマウスカーソルをあてると、確かに「TypeError: string.split is not a function(行 79)が発生しました。」という表示が現れますね。
|
20
20
|
|
5
修正
answer
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
4.メニューの「ツール」→「スクリプトエディタ」で、質問中のスクリプトをコピーして保存する。
|
15
15
|
|
16
16
|
5.「フォームの回答 1」のK1セルに、適当に項目名を入力する。
|
17
|
-
6.「フォームの回答 1」のK2セルに、適当に**半角カナの値(たとえば「アイウエオカキクコ」)**を入力する。
|
17
|
+
6.「フォームの回答 1」のK2セルに、適当に**半角カナの値(たとえば「アイウエオカキクコABCD」)**を入力する。
|
18
18
|
|
19
19
|
すると、「シート1」ではA1セルが#Error表示になり、エラーセルにマウスカーソルをあてると、確かに「TypeError: string.split is not a function(行 79)が発生しました。」という表示が現れますね。
|
20
20
|
|
4
修正
answer
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
`Logger.log(typeof string)`
|
27
27
|
を打ってログを見てみると、objectと表示されました。
|
28
28
|
|
29
|
-
また、queryが返す型を調べるため、スプレッドシート上のシート1の
|
29
|
+
また、queryが返す型を調べるため、スプレッドシート上のシート1のA2セルに試しに
|
30
30
|
`=TYPE(query('フォームの回答 1'!$A$2:$BO,"select ("&SUBSTITUTE(ADDRESS(1,match(K1,'フォームの回答 1'!$A$1:$BO$1,0),4),1,)&")"))`
|
31
31
|
と入力したところ、
|
32
32
|
「64」と表示されました。
|
3
修正
answer
CHANGED
@@ -13,8 +13,8 @@
|
|
13
13
|
を入力
|
14
14
|
4.メニューの「ツール」→「スクリプトエディタ」で、質問中のスクリプトをコピーして保存する。
|
15
15
|
|
16
|
-
5.「フォームの回答 1」の
|
16
|
+
5.「フォームの回答 1」のK1セルに、適当に項目名を入力する。
|
17
|
-
6.「フォームの回答 1」の
|
17
|
+
6.「フォームの回答 1」のK2セルに、適当に**半角カナの値(たとえば「アイウエオカキクコ」)**を入力する。
|
18
18
|
|
19
19
|
すると、「シート1」ではA1セルが#Error表示になり、エラーセルにマウスカーソルをあてると、確かに「TypeError: string.split is not a function(行 79)が発生しました。」という表示が現れますね。
|
20
20
|
|
2
修正
answer
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
5.「フォームの回答 1」のk1セルに、適当に項目名を入力する。
|
17
17
|
6.「フォームの回答 1」のk2セルに、適当に値(たとえば「あいうえお」)を入力する。
|
18
18
|
|
19
|
-
すると、「シート1」では#Error表示になり、マウスカーソルを
|
19
|
+
すると、「シート1」ではA1セルが#Error表示になり、エラーセルにマウスカーソルをあてると、確かに「TypeError: string.split is not a function(行 79)が発生しました。」という表示が現れますね。
|
20
20
|
|
21
21
|
--------------
|
22
22
|
|
@@ -45,4 +45,6 @@
|
|
45
45
|
(以下略)
|
46
46
|
```
|
47
47
|
|
48
|
-
とすればエラーはなくなると思います。
|
48
|
+
とすればエラーはなくなると思います。
|
49
|
+
|
50
|
+
繰り返しになりますが**実行する際の詳細が明らかにされておらず、実行環境が異なるかもしれないので、上記のようにコードを直したとしても質問者さんのご希望に沿う動作になるとは限らないことをご了承ください。**
|
1
修正
answer
CHANGED
@@ -20,25 +20,23 @@
|
|
20
20
|
|
21
21
|
--------------
|
22
22
|
|
23
|
-
推測すると、
|
24
|
-
string変数がsplit関数を持ってないということじゃないかと思いました。
|
23
|
+
推測すると、与えられたstring変数がsplit関数を持ってないから、ということじゃないかと思いました。
|
25
24
|
|
26
|
-
そこで関数の冒頭で
|
25
|
+
そこでf7conv関数の冒頭で
|
27
26
|
`Logger.log(typeof string)`
|
28
27
|
を打ってログを見てみると、objectと表示されました。
|
29
28
|
|
30
|
-
また、スプレッドシート上のシート1のa1セル
|
29
|
+
また、queryが返す型を調べるため、スプレッドシート上のシート1のa1セルに試しに
|
31
30
|
`=TYPE(query('フォームの回答 1'!$A$2:$BO,"select ("&SUBSTITUTE(ADDRESS(1,match(K1,'フォームの回答 1'!$A$1:$BO$1,0),4),1,)&")"))`
|
32
|
-
と
|
31
|
+
と入力したところ、
|
33
|
-
「64」と表示されま
|
32
|
+
「64」と表示されました。
|
34
33
|
|
35
|
-
ヘルプを見ると、
|
34
|
+
ヘルプを見ると、64は「配列」を意味するので、query関数は配列を返すようですね、
|
36
35
|
|
37
|
-
つまりf7conv関数は、文字列ではなく配列を受け取って
|
36
|
+
つまりf7conv関数は、文字列ではなく配列を受け取っており、それを直接splitしようとしてるのでダメなんじゃないかと思いました。
|
38
37
|
|
38
|
+
したがって、f7conv関数で引数から文字列を取り出して処理すればいいのではないか、と思いました。。
|
39
39
|
|
40
|
-
したがって、f7conv関数で処理対象をstringにすればいいのではないでしょうか。・
|
41
|
-
|
42
40
|
具体的には
|
43
41
|
```
|
44
42
|
function f7conv(strings) { //引数名変更
|
@@ -47,4 +45,4 @@
|
|
47
45
|
(以下略)
|
48
46
|
```
|
49
47
|
|
50
|
-
と
|
48
|
+
とすればエラーはなくなると思います。
|