web-dev-qa-db-ja.com

Googleフォームを介して新しいデータが入力されたときに、Googleスプレッドシートのフィルタービューを自動的に更新する方法

Googleスプレッドシートに、Googleフォームを介して新しいデータが入ったときに更新されないフィルタービューがあります。

フィルタービューを更新するには、フィルターを削除して再度適用するか、何も変更せずにフィルターメニューの[OK]をクリックします。ただし、F5キーを押してページを閉じたり開いたりしても機能しません。

新しいデータが入ったときにフィルタービューを自動的に更新する方法が必要です。または、少なくとも、フィルター設定を手動で調整しなくてもWebサイトを閉じて再度開くと、更新されたフィルタービューを取得できます。

どのように私はこれを行うことができますか?たぶん、onFormSubmitを起動するスクリプトがありますか?

7
RudolfKaiser

Google Apps ScriptはGoogleスプレッドシートの拡張に使用されますが、@ Normal Humanが指摘したように、現時点では、Googleスプレッドシートフィルターを更新/更新するメソッドは含まれていません。

https://code.google.com/p/google-apps-script-issues/ は、既存のGoogle Apps Scriptサービスの機能リクエストと機能強化のための場所です。人々は、問題にスターを付けることで機能のリクエストを「投票」できます。この場合、関連する問題は次のとおりです。

問題524:ツール/フィルターとGoogleアプリスクリプトの統合

4
Rubén

OnFormSubmitを起動するスクリプトを試してください。同じ条件を取得して再設定します。

  var sheet = SpreadsheetApp.getActiveSheet();
  var filter = sheet.getFilter();
  if (filter) {
    var criteria = filter.getColumnFilterCriteria(4);
    if (criteria) {
      filter.setColumnFilterCriteria(4, criteria)
    }
1
Peter

同じ結果が得られる回避策を見つけましたが、セットアップにはもう少し時間がかかる場合があります。

私がやることは、Google Formsの結果から得られるデータのピボットテーブルを作成し、テーブルを操作してデータを希望どおりに表現し、ピボットテーブルを新しいシートにリンクすることです(= {'Sheet Name '!A1:G100})、最終シートを希望どおりにフォーマットします。

この方法により、ピボットテーブルのデータをフィルター処理/操作でき、最終的なシートに反映されます。また、最も重要なことは、新しいフォームデータが入ると自動的に更新されることです。

**注:ピボットテーブルの範囲には、データが追加されるGoogleフォームの結果シートの空のセルが含まれていることを確認してください。つまり、現在50行のデータしかないが、来週には1000行になるとわかっている場合は、ピボットテーブルの範囲を1000行以上に設定します。

1
Roman Y. K

Googleスプレッドシートの機能を把握する必要がある場合は、マクロの記録を開始し、必要な変更を加えてから、マクロの記録を停止することがあります。これを行うと、更新機能があることがわかりました。

簡単なonEdit関数を作成しました。特定のページのデータが変更された場合にのみフィルターが更新されます。これは、フィルター処理された行に影響を与える唯一のページだからです。

function onEdit(e){

  // Set a comment on the edited cell to indicate when it was changed.

  var range = e.range;
  var sheet = range.getSheet();

  if (sheet.getSheetName() === "CNST Cost Estimator")
  {
    UpdateFilter();
  }
}
1
wriddle2