フィルタ時にGASでスプレッドシートへの記述が正しく動かない

364 views
Skip to first unread message

Tsuyoshi Kise

unread,
May 8, 2023, 7:42:46 PM5/8/23
to Google Apps API Japan
フォームからデータ受信時をトリガにしたスクリプトを記述しています。
たまにこの動作が意図しない挙動になっていたので調査したところ、スプレッドシートでフィルタによる非表示行が原因になっていることがわかりました。

指定のセルにデータを書き込む処理ですが、
文字列(担当者名、対象物)は非表示行に対しても問題なく書き込めます。
日付の書き込み、背景色変更は非表示行に対してはできず、表示されている場合のみ正しく動きます。
対処法はありますでしょうか?

参考コード:
function setColorTo4Cell(range, color){
  range.setBackground(color);
  range.offset(0,1).setBackground(color);
  range.offset(0,2).setBackground(color);
  range.offset(0,3).setBackground(color);
}
function setValueTo4Cell(range, engineer, work, startTime, finishTime, product){
  range.setValue(engineer);
  range.offset(0,1).setValue(startTime);
  range.offset(0,1).setNumberFormat("h:MM");
  range.offset(0,2).setValue(finishTime);
  range.offset(0,2).setNumberFormat("h:MM");
  range.offset(0,3).setValue(product);
}
※ログで上記メソッドが起動していること、引数が正しい情報であることは確認済みです。
※表示行に対しては意図どおりの挙動になります。


また、フィルタによる非表示が原因になっているので対策として、
フィルタを解除→セルの編集→フィルタを戻す
という処理を記述しましたが、この方法では別の問題が発生しました。
フィルタ条件を格納し、セル編集後に元の条件でフィルタを設定しなおすと、その後フィルタの操作ができない状態(スプレッドシートでフィルタの下向き三角をクリックするとフィルタメニュー?(「a-zで並び替え」等が選択できるもの)が一瞬出てきますが、1秒も立たずに勝手に消えてしまい操作ができない)に陥ります。
この対処法もご存じでしたらご教示ください。

参考コード:
let filter = PS.getFilter();
  let filterColumnLength = 61;
  let filterCriterias = []
  if(filter){
    for (var i=0;i<filterColumnLength;i++){
      filterCriterias.push(filter.getColumnFilterCriteria(i+1))
    }
    filter.remove() //フィルタを解除
  }

  //フィルタ解除後に行う動作を記述

  var newfilter = PS.getRange(3,1, PS.getLastRow(), filterColumnLength).createFilter() //フィルタを新たに設定
  for (var i=0;i<filterColumnLength;i++){
    if(filterCriterias.length>0){
      newfilter.setColumnFilterCriteria(i+1,filterCriterias[i])
    }
  }

どうぞよろしくお願い致します。
Reply all
Reply to author
Forward
0 new messages