回答編集履歴

7

2024/03/16 09:11

投稿

退会済みユーザー
test CHANGED
@@ -65,8 +65,8 @@
65
65
  と入れれば、セルE3とE5の積が返ってきます。
66
66
 
67
67
 
68
- ただし、このcalcTotalを呼び出す場合、呼び出し元の3つの引数のうち1つも省略することはできません。(calcTotal関数内で空白文字のエラー処理していたとしても、です)
68
+ ただし、このcalcTotalを呼び出す場合、呼び出し元の3つの引数のうち1つも空白セルであってダメ。(calcTotal関数内で空白文字のエラー処理していたとしても、です)
69
- 同様にcalcMultipleを呼び出す場合、2つの引数のうち1つ省略することはせん
69
+ 同様にcalcMultipleを呼び出す場合、2つの引数のうちいずれ空白セルない必要があり
70
70
 
71
71
  このように、少なくとも指定できる引数に制限があるため、100%希望する動作にならない可能性は高いです。
72
72
  また、返せる値にも制限がある場合があります。

6

2024/03/16 08:59

投稿

退会済みユーザー
test CHANGED
@@ -18,7 +18,7 @@
18
18
  ---
19
19
 
20
20
 
21
- # コメント内の質問に対する回答
21
+ # コメント内の質問(及び追加質問)に対する回答
22
22
 
23
23
  > 共通化したい関数が複数ある場合、その関数の数だけスクリプト内に関数を用意する必要が出てしまうため、ライブラリ自体を呼び出す関数をひとつだけ用意し、それを介してライブラリ内の関数にアクセスすることはできないものでしょうか。
24
24
 

5

2024/03/16 08:57

投稿

退会済みユーザー
test CHANGED
@@ -71,5 +71,5 @@
71
71
  このように、少なくとも指定できる引数に制限があるため、100%希望する動作にならない可能性は高いです。
72
72
  また、返せる値にも制限がある場合があります。
73
73
  そもそもevalは安易に使うべきではありません。
74
- (当然ですが、質問者さんがどういう関数を共通したいかについて全部開示されていない以上、全部の関数について、上のfuncが動作することを保証することなどできません。上記は力業であり、スプレッドシートからのカスタム関数呼び出しには制限があることを理解してください。仮に上で動かない関数がある場合であっても、Googleスプレッドシートを使っている限り、無理なものは無理なので、諦めてください。)
74
+ (当然ですが、質問者さんがどういう関数を共通用のGASに書ているかについて全部開示されていない以上、全部の関数について、上のfuncが動作することを保証することなどできませんし、動作しない場合にその原因を教えることもできません。上記は力業であり、スプレッドシートからのカスタム関数呼び出しには制限があることを理解してください。仮に上で動かない関数がある場合であっても、Googleスプレッドシートを使っている限り、無理なものは無理なので、諦めてください。)
75
75
 

4

2024/03/16 08:53

投稿

退会済みユーザー
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
- 呼び出し先のGASに、上を1つだけ書く。
33
+
34
34
 
35
35
 
36
36
  # 呼び出し先のスプレッドシートでセルでの呼び出し
@@ -39,7 +39,7 @@
39
39
  ```
40
40
 
41
41
 
42
- たとえば、呼び出し元の共通コード用のGASに、3つの引数をとってその合計を返すcalcTotalと言う関数と、2つの引数をとってその積を返す関数calcMultipleという関数があるとする。
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

2024/03/16 08:52

投稿

退会済みユーザー
test CHANGED
@@ -30,7 +30,7 @@
30
30
  return eval("Test."+funcname+"("+args.join()+")")
31
31
  }
32
32
  ```
33
- 呼び出し先のGASに、上を1つだけ書く。(共通コード用GASのスクリプトIDを「Test」に設定している前提)
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を呼び出す場合、呼び出し元のA1、A2、A3省略することはできません。(calcTotal関数内で空白文字のエラー処理していたとしても、です)
68
+ ただし、このcalcTotalを呼び出す場合、呼び出し元の3つの引数のうち1つも省略することはできません。(calcTotal関数内で空白文字のエラー処理していたとしても、です)
69
+ 同様にcalcMultipleを呼び出す場合、2つの引数のうち1つも省略することはできません。
58
70
 
59
71
  このように、少なくとも指定できる引数に制限があるため、100%希望する動作にならない可能性は高いです。
72
+ また、返せる値にも制限がある場合があります。
60
73
  (当然ですが、質問者さんがどういう関数を共通したいかについて全部開示されていない以上、全部の関数について、上のfuncが動作することを保証することなどできません。上記は力業であり、スプレッドシートからのカスタム関数呼び出しには制限があることを理解してください。仮に上で動かない関数がある場合であっても、Googleスプレッドシートを使っている限り、無理なものは無理なので、諦めてください。)
61
74
 

2

ついき

2024/03/16 08:47

投稿

退会済みユーザー
test CHANGED
@@ -3,14 +3,59 @@
3
3
  そのようなことをしたい場合は、結果を表示したいスプレッドシートのスクリプトの関数内で、その外部ライブラリの関数を呼び出して、その結果を取得しスプレッドシートに返すというやり方になります。
4
4
 
5
5
 
6
- # 呼び出し先のGASでのコード
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

2024/03/16 07:07

投稿

退会済みユーザー
test CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  # 呼び出し先のGASでのコード
7
7
  ```
8
- function Test() {
8
+ function test() {
9
9
  return Test.getText()); // This is text.
10
10
  }
11
11
  ```