回答編集履歴
7
あ
test
CHANGED
@@ -65,8 +65,8 @@
|
|
65
65
|
と入れれば、セルE3とE5の積が返ってきます。
|
66
66
|
|
67
67
|
|
68
|
-
ただし、このcalcTotalを呼び出す場合、呼び出し元の3つの引数のうち1つも
|
68
|
+
ただし、このcalcTotalを呼び出す場合、呼び出し元の3つの引数のうち1つも空白セルであってはダメです。(calcTotal関数内で空白文字のエラー処理していたとしても、です)
|
69
|
-
同様にcalcMultipleを呼び出す場合、2つの引数のうち
|
69
|
+
同様にcalcMultipleを呼び出す場合、2つの引数のうちいずれも空白セルでない必要があります。
|
70
70
|
|
71
71
|
このように、少なくとも指定できる引数に制限があるため、100%希望する動作にならない可能性は高いです。
|
72
72
|
また、返せる値にも制限がある場合があります。
|
6
あ
test
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
---
|
19
19
|
|
20
20
|
|
21
|
-
# コメント内の質問に対する回答
|
21
|
+
# コメント内の質問(及び追加質問)に対する回答
|
22
22
|
|
23
23
|
> 共通化したい関数が複数ある場合、その関数の数だけスクリプト内に関数を用意する必要が出てしまうため、ライブラリ自体を呼び出す関数をひとつだけ用意し、それを介してライブラリ内の関数にアクセスすることはできないものでしょうか。
|
24
24
|
|
5
w
test
CHANGED
@@ -71,5 +71,5 @@
|
|
71
71
|
このように、少なくとも指定できる引数に制限があるため、100%希望する動作にならない可能性は高いです。
|
72
72
|
また、返せる値にも制限がある場合があります。
|
73
73
|
そもそもevalは安易に使うべきではありません。
|
74
|
-
(当然ですが、質問者さんがどういう関数を共通
|
74
|
+
(当然ですが、質問者さんがどういう関数を共通用のGASに書いているかについて全部開示されていない以上、全部の関数について、上のfuncが動作することを保証することなどできませんし、動作しない場合にその原因を教えることもできません。上記は力業であり、スプレッドシートからのカスタム関数呼び出しには制限があることを理解してください。仮に上で動かない関数がある場合であっても、Googleスプレッドシートを使っている限り、無理なものは無理なので、諦めてください。)
|
75
75
|
|
4
q
test
CHANGED
@@ -24,13 +24,13 @@
|
|
24
24
|
|
25
25
|
**全く推奨しませんが**下記のようなやり方は不可能ではありません。
|
26
26
|
|
27
|
-
# 呼び出し先のGASでのコード
|
27
|
+
# 呼び出し先のGASでのコード(呼び出し先のGASに、↓のコードを1つだけ書いて保存)
|
28
28
|
```
|
29
29
|
function func(funcname, ...args) {
|
30
|
-
return eval("Test."+funcname+"("+args.join()+")")
|
30
|
+
return eval("Test."+funcname+"("+args.join()+")");
|
31
31
|
}
|
32
32
|
```
|
33
|
-
|
33
|
+
|
34
34
|
|
35
35
|
|
36
36
|
# 呼び出し先のスプレッドシートでセルでの呼び出し
|
@@ -39,7 +39,7 @@
|
|
39
39
|
```
|
40
40
|
|
41
41
|
|
42
|
-
たとえば、呼び出し元の共通コード用のGASに、3つの引数をとってその合計を返すcalcTotalと言う関数と、2つの引数をとってその積を返す
|
42
|
+
たとえば、呼び出し元の共通コード用のGASに、3つの引数をとってその合計を返すcalcTotalと言う関数と、2つの引数をとってその積を返すcalcMultipleという関数があるとする。
|
43
43
|
コードで書くと
|
44
44
|
```
|
45
45
|
function calcTotal(a,b,c) {
|
@@ -70,5 +70,6 @@
|
|
70
70
|
|
71
71
|
このように、少なくとも指定できる引数に制限があるため、100%希望する動作にならない可能性は高いです。
|
72
72
|
また、返せる値にも制限がある場合があります。
|
73
|
+
そもそもevalは安易に使うべきではありません。
|
73
74
|
(当然ですが、質問者さんがどういう関数を共通したいかについて全部開示されていない以上、全部の関数について、上のfuncが動作することを保証することなどできません。上記は力業であり、スプレッドシートからのカスタム関数呼び出しには制限があることを理解してください。仮に上で動かない関数がある場合であっても、Googleスプレッドシートを使っている限り、無理なものは無理なので、諦めてください。)
|
74
75
|
|
3
え
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
return eval("Test."+funcname+"("+args.join()+")")
|
31
31
|
}
|
32
32
|
```
|
33
|
-
呼び出し先のGASに、上を1つだけ書く。
|
33
|
+
呼び出し先のGASに、上を1つだけ書く。
|
34
34
|
|
35
35
|
|
36
36
|
# 呼び出し先のスプレッドシートでセルでの呼び出し
|
@@ -39,12 +39,17 @@
|
|
39
39
|
```
|
40
40
|
|
41
41
|
|
42
|
-
たとえば、呼び出し元の共通コード用のGASに、3つの引数をとってその合計を返すcalcTotalと言う関数がある
|
42
|
+
たとえば、呼び出し元の共通コード用のGASに、3つの引数をとってその合計を返すcalcTotalと言う関数と、2つの引数をとってその積を返す関数calcMultipleという関数があるとする。
|
43
43
|
コードで書くと
|
44
44
|
```
|
45
45
|
function calcTotal(a,b,c) {
|
46
46
|
return a+b+c;
|
47
47
|
}
|
48
|
+
|
49
|
+
function calcMultiple(x, y) {
|
50
|
+
return x * y;
|
51
|
+
}
|
52
|
+
|
48
53
|
```
|
49
54
|
のような。
|
50
55
|
|
@@ -54,8 +59,16 @@
|
|
54
59
|
```
|
55
60
|
と入れれば、セルA1とA2とA3の合計が返ってきます。
|
56
61
|
|
62
|
+
```
|
63
|
+
=FUNC("calcMultiple", E3,E5)
|
64
|
+
```
|
65
|
+
と入れれば、セルE3とE5の積が返ってきます。
|
66
|
+
|
67
|
+
|
57
|
-
ただし、このcalcTotalを呼び出す場合、呼び出し元の
|
68
|
+
ただし、このcalcTotalを呼び出す場合、呼び出し元の3つの引数のうち1つも省略することはできません。(calcTotal関数内で空白文字のエラー処理していたとしても、です)
|
69
|
+
同様にcalcMultipleを呼び出す場合、2つの引数のうち1つも省略することはできません。
|
58
70
|
|
59
71
|
このように、少なくとも指定できる引数に制限があるため、100%希望する動作にならない可能性は高いです。
|
72
|
+
また、返せる値にも制限がある場合があります。
|
60
73
|
(当然ですが、質問者さんがどういう関数を共通したいかについて全部開示されていない以上、全部の関数について、上のfuncが動作することを保証することなどできません。上記は力業であり、スプレッドシートからのカスタム関数呼び出しには制限があることを理解してください。仮に上で動かない関数がある場合であっても、Googleスプレッドシートを使っている限り、無理なものは無理なので、諦めてください。)
|
61
74
|
|
2
ついき
test
CHANGED
@@ -3,14 +3,59 @@
|
|
3
3
|
そのようなことをしたい場合は、結果を表示したいスプレッドシートのスクリプトの関数内で、その外部ライブラリの関数を呼び出して、その結果を取得しスプレッドシートに返すというやり方になります。
|
4
4
|
|
5
5
|
|
6
|
-
|
6
|
+
・呼び出し先のGASでのコード
|
7
7
|
```
|
8
8
|
function test() {
|
9
9
|
return Test.getText()); // This is text.
|
10
10
|
}
|
11
11
|
```
|
12
12
|
|
13
|
-
|
13
|
+
・呼び出し先のスプレッドシートでセルでの呼び出し
|
14
14
|
```
|
15
15
|
=test()
|
16
16
|
```
|
17
|
+
|
18
|
+
---
|
19
|
+
|
20
|
+
|
21
|
+
# コメント内の質問に対する回答
|
22
|
+
|
23
|
+
> 共通化したい関数が複数ある場合、その関数の数だけスクリプト内に関数を用意する必要が出てしまうため、ライブラリ自体を呼び出す関数をひとつだけ用意し、それを介してライブラリ内の関数にアクセスすることはできないものでしょうか。
|
24
|
+
|
25
|
+
**全く推奨しませんが**下記のようなやり方は不可能ではありません。
|
26
|
+
|
27
|
+
# 呼び出し先のGASでのコード
|
28
|
+
```
|
29
|
+
function func(funcname, ...args) {
|
30
|
+
return eval("Test."+funcname+"("+args.join()+")")
|
31
|
+
}
|
32
|
+
```
|
33
|
+
呼び出し先のGASに、上を1つだけ書く。(共通コード用GASのスクリプトIDを「Test」に設定している前提)
|
34
|
+
|
35
|
+
|
36
|
+
# 呼び出し先のスプレッドシートでセルでの呼び出し
|
37
|
+
```
|
38
|
+
=FUNC("共通コード用GAS内にある呼び出したい関数名",引数);
|
39
|
+
```
|
40
|
+
|
41
|
+
|
42
|
+
たとえば、呼び出し元の共通コード用のGASに、3つの引数をとってその合計を返すcalcTotalと言う関数がある場合があるとする。
|
43
|
+
コードで書くと
|
44
|
+
```
|
45
|
+
function calcTotal(a,b,c) {
|
46
|
+
return a+b+c;
|
47
|
+
}
|
48
|
+
```
|
49
|
+
のような。
|
50
|
+
|
51
|
+
この場合、呼び出し先のスプレッドシートのセルに
|
52
|
+
```
|
53
|
+
=FUNC("calcTotal", A1,A2,A3)
|
54
|
+
```
|
55
|
+
と入れれば、セルA1とA2とA3の合計が返ってきます。
|
56
|
+
|
57
|
+
ただし、このcalcTotalを呼び出す場合、呼び出し元のA1、A2、A3を省略することはできません。(calcTotal関数内で空白文字のエラー処理していたとしても、です)
|
58
|
+
|
59
|
+
このように、少なくとも指定できる引数に制限があるため、100%希望する動作にならない可能性は高いです。
|
60
|
+
(当然ですが、質問者さんがどういう関数を共通したいかについて全部開示されていない以上、全部の関数について、上のfuncが動作することを保証することなどできません。上記は力業であり、スプレッドシートからのカスタム関数呼び出しには制限があることを理解してください。仮に上で動かない関数がある場合であっても、Googleスプレッドシートを使っている限り、無理なものは無理なので、諦めてください。)
|
61
|
+
|
1
s
test
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
# 呼び出し先のGASでのコード
|
7
7
|
```
|
8
|
-
function
|
8
|
+
function test() {
|
9
9
|
return Test.getText()); // This is text.
|
10
10
|
}
|
11
11
|
```
|