質問: SpreadsheetApp.getActiveSheet().getDatarenge().getValues(); ?> たぶん、ここで全部のデータを取得するようになっているので、非表示判定について、フィルタリング実行の後のセル範囲の値取得についてなど調べましたがわかりませんでした。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: Basic filterでフィルタした結果のシートから値を取得したいとの理解です。残念ながら、`getValues()`や`getDisplayValues()`ではフィルタが反映されていない状態の全てのデータが取得されています。 フィルタされた状態のデータ取得方法として提案されているのがSheets APIの`columnMetadata`や`rowMetadata`を使ってフィルタされた結果の値を取得する内容です。フィルタされているrangeを確認したい場合はこれで問題ないと思いますが、フィルタされた結果の値のみを取得したい場合は少し複雑かもしれません。そこで、次のような方法は如何でしょうか。いくつかある(かもしれない)回避策の一つとしてみてください。 パターン1 シンプルな方法としては該当のシートをウェブに公開することです。公開されたシートはフィルタされた結果のシートです。これをそのまま表示するのもありかと思います。この場合、Basic filterの条件が変化すると、再読み込みによりシートは変化します。 パターン2 実際にフィルタされた結果のシートから値を取得したい場合があります。このような場合は、次のようなスクリプトで値を取得するのは如何でしょうか。上記の「ウェブに公開」を利用して結果を取得しています。この場合、アクセストークンを使用しますので、特にスプレッドシートは公開や共有する必要はありません。 ``` function myFunction() { var spreadsheetId = "###"; // ここにスプレッドシートIDをセットしてください。 var sheetId = "###"; // ここにシートIDをセットしてください。 var url = "https://docs.google.com/spreadsheets/d/" + spreadsheetId + "/gviz/tq?tqx=out:csv&gid=" + sheetId + "&access_token=" + ScriptApp.getOAuthToken(); var res = UrlFetchApp.fetch(url); var array = Utilities.parseCsv(res.getContentText()); Logger.log(array); // ここで2次元配列に入った状態の値を確認できます。 // SpreadsheetApp.getActiveSpreadsheet(); // これはスクリプトエディタの自動スコープ検出を利用するためのコメント行です。念のためです。 } ``` * 上記のサンプルスクリプトでは結果は2次元配列に入った状態で取得されますので、`getValues()`で取得したものと同じ要領で使用することができるかと思われます。 * もしもBasic filterの条件を変更した場合は、再度読み込んでください。これにより値が変化します。