ユーザーが行の表示を解除するときにスクリプトを実行したい。ユーザーが行を非表示にしたときに検出する唯一の方法は、onChangeイベント内です。私が見ることができる唯一の方法は、変更されたものがchangeTypeプロパティを介して試みることです。ただし、ユーザーが行を非表示にすると、changeTypeはOTHERに等しくなります。 OTHERはあらゆる種類のものを意味することができます。だから私は行を隠していたかどうかを調べてみたいと思う。行を表示した後にonChangeイベント内でgetRange()が機能しないのはなぜですか?
私が気づいたのは、行を再表示すると、それらの行が選択されている(フォーカスがある)ことです。理論的には、getActiveRange()を使用するだけで、非表示の行を返すことができます。
問題は、onChangeイベント内でgetActiveRangeを使用すると何も返されないということです。しかし、onChangeイベント関数のコードが完了した後にgetActiveRangeを呼び出すと、シート内で現在選択しているものを変更していなくても正しい情報が得られます。
onChangeイベント内でgetRange()が何も返さないのはなぜですか?
次のonChangeコードは、ユーザーが行の表示を非表示にしたときにgetActiveRangeメソッドによって返される行数を示すダイアログボックスを表示します。コードは、Plan - > Testというメニュー項目を追加します。 [テスト]をクリックすると、現在選択されている行数のダイアログボックスが表示されます。これを試してみるには、いくつかの行を隠してから再表示してください。表示を解除すると、0と表示されるダイアログボックスが表示されます。次に、メニューの[プラン] - > [テスト]を選択すると、表示されていない実際の行数を示す別のダイアログボックスが表示されます。
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Plan')
.addItem('Collapse Section', 'collapseSection')
.addSeparator()
.addItem('Test','testThis')
.addToUi();
}
function testThis() {
var thisSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var thisRange = thisSheet.getActiveRange();
popMsg(thisRange.getNumRows());
}
function onChange(e){
var activeSheet = e.source.getActiveSheet();
if (e.changeType == "OTHER") {
// some other event occurred, possible Unhiding Rows
if (activeSheet.getName() == "Portfolio") {
// only execute this code if the OTHER event occurred while on the Portfolio tab
var thisSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var thisRange = thisSheet.getActiveRange();
popMsg(thisRange.getNumRows());
}
}
}
function popMsg (thisMsg) {
var ui = SpreadsheetApp.getUi();
var thisMsg = ui.alert('Information',thisMsg,ui.ButtonSet.OK);
}
あまりにも悪いことに、これは過去5年間に対処されているようです... ... –
また、P2は標準優先レベルですが、S2は市長バグの略です。回避策があり、アプリケーションの機能に影響を与えることなく延期できます。 " – k4k4sh1