我创建了一个脚本,通过升序日期来排序电子表格行,它应该隐藏月份与我们当前所在的月份不一样的所有行。下面是剧本:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Diário de Caixa');
sheet.getRange('A3:M').activate();
sheet.getActiveRange().sort({column: 6, ascending: true});
var r = sheet.getRange('C3:C');
var date = new Date();
var mesAtual = Utilities.formatDate(date, Session.getScriptTimeZone(), "M");
var v = r.getValues();
for(var i=v.length+1;i>=0;i--){
if(v[0,i]!=mesAtual){
sheet.hideRows(i);
}
}
}在我写这个问题的时候,我已经填充了数据直到第36行,所以脚本应该已经隐藏了第36行以下的所有行,但是它也隐藏了第34、35和36行,即使它们的公式和值等于第3行到第33行,并且它们都返回"1",即1月。
少了什么?
提前感谢!
发布于 2022-01-18 21:05:29
我认为这个v[0,i]应该是v[i][0]
这个var r = sheet.getRange(3, 3, sheet.getLastRow() -2);会比这个var r = sheet.getRange('C3:C');好..。在调试器中看看这个。您通常在getLastRow()和maxRows之间获得空。
你也可以使用var r = sheet.getRange('C3:C').getValues().filter(e => e[0]);,用虚假和真实的方式消除空白处。
您还可以使用valueOf()和getTime()进行很多日期比较,因为它们都从引用日期返回毫秒,因此可以对它们进行数值比较。
https://stackoverflow.com/questions/70762322
复制相似问题