問題タブ [google-sheets-custom-function]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
3326 参照

google-apps-script - OnEdit-トリガーとセル機能の組み合わせ

他のセルの行の内容に基づいてセルの値を計算するonEdit-scriptがあります。ターゲットセルの1つの値が変更されたときに計算を常にやり直す必要はないため、このスクリプトを通常のセル関数ではなくonEditトリガーに含める必要がありますが、代わりに特定の条件をチェックし、それらが満たされた場合にのみ再計算します。

これに関して私が抱えている小さな問題は、onEdit-scriptがデータを読み取るセルの1つに、単純な数値ではなく関数が含まれていることです。セルにデータを入力すると、このセル関数とonEdit-scriptの両方がトリガーされることがあるため、これにより問題が発生します。また、ほとんどの場合、oEdit-functionはcell-functionが終了する前に実行されるため、onEdit-functionはこのセルから「Thinking」を取得するだけなので、NaNを返します。

したがって、これに対する便利な解決策は、onEdit-functionに「ターゲット」セルの計算が完了するのを待たせることだったと思いますが、これを行う方法はないと思いますか?

もちろん、セル関数(基本的にはいくつかの機能が追加されたSUM関数)をonEdit-scriptに移動することもできます。これにより、問題が解決します。

しかし、私には、onEdit-triggerにすべての対話機能があるのはそれほど良いことではないようです。それとも私はばかげているだけですか?

それとも、どういうわけか私が取ることができる別のアプローチはありますか?

0 投票する
1 に答える
6262 参照

google-apps-script - Google Apps Scripting で msgBox を呼び出す権限がありません

最も単純な Google Apps スクリプトでさえ実行に問題があります。たとえば、スプレッドシートのセルを設定してこのスクリプトを実行すると、次の=pantsHate(Y)エラーが発生します。

エラー: msgBox を呼び出す権限がありません

私の最終目標は、日付を操作する小さな関数を作成することです。具体的には、2 つの日付の間に何日経過したかを正確に調べる必要があります (うるう年、特定の日/月などはすべて要因です)。このプログラムは単なるテストでしたが、私はすでに何か間違ったことをしているようです...どんな助けも大歓迎です!

更新: 新しいプロジェクトでこれを試したところ、うまくいきました... arg!
更新 2: でもう一度実行する=pantsHate("Y")と、この「新しい」プロジェクトで同じエラーが発生しました... なぜ Google、なぜ?

0 投票する
2 に答える
1859 参照

google-apps-script - この Google ユーザー アカウントでは、Google スプレッドシート スクリプトが 1 秒間に呼び出される回数が多すぎます

集計、重みなどを計算するスクリプトを含む Google スプレッドシートがあり、スプレッドシートはセル内でスクリプトの関数を何度も呼び出します。数日前、データを変更しようとすると、「この Google ユーザー アカウントに対して 1 秒あたりのスクリプトの呼び出し回数が多すぎます」というメッセージが表示されるようになりました。これを修正するにはどうすればよいですか? 関数にスリープまたは待機関数を追加しますが、実行が遅くなるだけですよね?スプレッドシートがそれらを呼び出す速度に影響するべきではありませんか?

0 投票する
1 に答える
145 参照

google-apps-script - 各セルを 1 回呼び出すのではなく、1 回の関数呼び出しですべてのセルにデータを入力する方法はありますか?

これが私の問題です。複数のシートを含むスプレッドシートがあり、各シートには約 300 ~ 500 行あります。ScriptDb を使用して各シートのデータを保存しています。

私が現在行っているのは、各シートの 300 ~ 500 個のセルでカスタム関数を呼び出して、特定のセルにデータを入力することです。何が起こるかというと、一部は入力され、残りはデータベースに何度もクエリを実行したと言ってエラーになります。短い期間。明らかに、セルごとにデータベースにクエリを実行することは、最善の解決策ではありません。

現在のシートのすべてのデータを照会し、そのデータを各セルで取得できるようにするにはどうすればよいでしょうか。私が読んだことは、GAS で実際に「グローバル」変数を使用することはできず、CacheService や ScriptDB などを使用する必要があるということです。これは私がやろうとしていることです。私はそれをあまりにも多くのことを求めているだけです。

各セルを 1 回呼び出すのではなく、1 回の関数呼び出しですべてのセルにデータを入力する方法はありますか? 何が不足しているか、または他にどのような解決策がありますか?

今日、同様の質問があったことに気付きました: Google スプレッドシート スクリプトは、この Google ユーザー アカウントに対して 1 秒あたりの回数が多すぎます

0 投票する
3 に答える
9046 参照

javascript - Google スプレッドシートから Google App Script メソッドに配列を渡すことはできますか?

Google スプレッドシートから Google App Script メソッドに配列を渡すことはできますか?

2 つの要素を持つリストを想定する App Script 関数があるとします (注: この例は単なる例なので、各要素を個別の引数として単純に渡すだけで問題が解決するとは言わないでください)。Google スプレッドシートのセルからこの関数を呼び出すにはどうすればよいですか?

「=myFunc([1,2])」と「=myFunc((1,2))」の両方を試しましたが、どちらも解析エラーが発生します。

0 投票する
2 に答える
21761 参照

debugging - Google Apps Script でのカスタム関数のデバッグ

Apps Script で Google スプレッドシート用の最初のカスタム関数を作成しようとしていますが、デバッガーを使用するのに苦労しています。

Google ドキュメントのカスタム関数のデモ コードに取り組んでおりdrivingDistance(origin, destination)、スプレッドシートのセルで使用されているカスタム関数にブレークポイントを設定しました。私が抱えている問題は、デバッガーが関数に渡されるパラメーターを として表示することundefinedです。ただし、実行中に作成されるその他の変数の内容は正しく表示されます (入力パラメーターに依存しない限り)。

面白いことに、入力パラメーターは未定義として表示されますが、関数の計算は成功するため、これはデバッガーの問題のようです。残念ながら、この問題により、独自のコードの作成とデバッグをうまく学習できません (複雑な入力パラメーターを使用する必要があるため)。

問題は Apps Script のサーバー側の実行に関連していると思われるので、Logger クラスを使用して入力パラメーターをログに記録し、これらの変数を新しいローカル変数にコピーしようとしました。しかし、私が思いついたのはundefined.

もう 1 つの奇妙なヒントは、typeofパラメーターの戻り値Stringです。しかし、それらの長さを取得するとエラーがスローされ、それらを別の文字列と連結しようとすると、文字列「未定義」が返されます(画面ダンプを参照)。

デバッガーのスクリーンショット

ここで何が起こっているのかについての洞察を探しています。

0 投票する
13 に答える
40600 参照

google-apps-script - 新しい Google スプレッドシートのカスタム関数で、「読み込み中...」と無期限に表示されることがある

特定対象: 「新しい」Google スプレッドシートのみ。

これは既知の問題であり、新しいシートで Google によって強調表示されています。

問題: Google スプレッドシートの google-apps-script で複雑な*カスタム関数を記述すると、セルの周りに赤いエラー ボックスが表示され、"読み込み中..." というテキストが表示されることがあります。

Google は次のことを提案しています。

これが発生した場合は、ページをリロードするか、関数の名前を変更して、すべての参照を新しい名前に変更してみてください。

ただし、この問題を経験している他の開発者 (および「読み込み中...」エラーを回避できない開発者) のために、これを (制限付きで) 一貫して回避する方法について、以下の回答に私の調査結果を書きました。


*この質問は、 Google スプレッドシートの不明確な「エラー...データの読み込み中」の問題に対する標準的な回答として扱っています。複雑な機能や遅い機能に限定されません。

0 投票する
1 に答える
1005 参照

javascript - 多くのセルのデータを 1 つに結合する

Googleスプレッドシートでかなり長いスプレッドシートをまとめています。このスプレッドシートには、名前、ブランド、部品番号などの製品に関する情報が含まれています。以前に助けられ、いくつかの優れた解決策が提供されましたが、まだ制限に直面しています。

私がやろうとしているのは、他のセルの情報に基づいて説明フィールドを自動的に生成することです。

説明列で使用している式は="Brand Name"&" "&A3&" "&B3&" "&(joinVals(E3:G3," x "))&" "&K3

joinVals(E3:G3," x ")長さ (E) 幅 (F) 高さ (G) を含む別々の列を結合し、値の間に「x」を追加します。その結果、E x F x G

このスクリプトは上記の式で機能します

ただし、このエラーが発生し続けます

この Google ユーザー アカウントに対して 1 秒間に呼び出されるスクリプトの回数が多すぎます。

このドキュメントには10​​00以上の行が含まれているため、エラーを回避するためにこれを配列として実行できるかどうか疑問に思っています。

最終的に達成したい結果は、次のようなものになるはずです 「ブランド名」 部品番号(A) 製品名(B) 寸法(E x F x G) サイズ(K)

ARRAY スクリプトを実行する必要がありますか?

皆様、どうもありがとうございました。このフォーラムはとても役に立ちました。

0 投票する
3 に答える
7649 参照

javascript - Google スプレッドシートのカスタム関数でカスタム例外とエラー メッセージをスローしますか?

Google スプレッドシート (Excel などと同様) では、ユーザーが数式に不適切な入力を入力すると、問題のあるセルにエラー コードが出力され、小さなポップアップにエラーの詳細が表示されます。「=SQRT(-1)」と入力すると、「#NUM!」がセルに出力され、値が 0 以上である必要があることがポップアップで説明されます。

これを Google スプレッドシートのカスタム関数で複製するにはどうすればよいですか? 例外をスローすると、ほとんどの場合機能します。たとえば、範囲外の入力値をキャッチしてカスタム例外をスローすると、"#ERROR!" になります。問題のあるセルに出力され (問題ありません)、例外に付随する文字列が対応するポップアップに出力されます (これも問題ありません)。問題は、Google Apps Script エンジンが、例外を生成した対応するソース コード行も例外メッセージに追加することです。そのため、単に「入力値は 0.0 から 1.0 の間である必要があります」と表示されるポップアップではなく、「入力値は 0.0 と 1.0 の間である必要があります (199 行目)」と表示されます。

行番号の出力を抑制したり、ポップアップのメッセージを上書きしたりする方法はありますか? カスタム エラーをスローして、ユーザーに詳細なエラー メッセージを提供できるようにしたいと考えています。しかし、関係のない行番号への参照によって混乱させたくありません。