用于按日期隐藏列的 Google 表格脚本



我本质上是在尝试完全按照这个问题中所做的操作,但使用列而不是行。当我按原样运行脚本时,它工作正常。但是出于某种原因,只是将所有对列的引用切换到行(反之亦然(对我不起作用,而且我无法弄清楚出了什么问题。

作为参考,这是我所拥有的:

function onOpen()
{
var ui = SpreadsheetApp.getUi();
ui.createMenu('My Tools')
.addItem('Hide Columns','hideColumnsDate')
.addToUi();
}
function hideColumnsDate(row)
{
var row = (typeof(row) !== 'undefined') ? row : '1';
var day = 86400000;
var today = new Date().getTime();
var rng = SpreadsheetApp.getActiveSheet().getRange(row + ':' + row);
var rngA = rng.getValues();
for(var i = 0; i < rngA.length ;i++)
{
if(isDate(rngA[i][0]) && (((today - new Date(rngA[i][0]).getTime())/day) > 7 ))
{
SpreadsheetApp.getActiveSheet().hideColumns(i + 1);
}
}
}
function isDate (x)  
{ 
return (null != x) && !isNaN(x) && ("undefined" !== typeof x.getDate); 
}

修改脚本时,此修改如何?请将其视为几种修改之一。

修改点:

  • 在您的情况下,从SpreadsheetApp.getActiveSheet().getRange(row + ':' + row)范围检索的值是[[column1, column2, column3,,,]]
    • 在这种情况下,for 循环的长度为rngA[0].length
    • 为了检索列的值,请将rngA[i][0]修改为rngA[0][i]

修改后的脚本:

从:
for(var i = 0; i < rngA.length ;i++)
{
if(isDate(rngA[i][0]) && (((today - new Date(rngA[i][0]).getTime())/day) > 7 ))
自:
for(var i = 0; i < rngA[0].length ;i++)
{
if(isDate(rngA[0][i]) && (((today - new Date(rngA[0][i]).getTime())/day) > 7 ))

注意:

  • 在您的情况下,与其他模式一样,您还可以使用以下修改。
    • var rngA = rng.getValues();修改为var rngA = rng.getValues()[0];,并将rngA[i][0]修改为rngA[i]
  • 在上面修改的脚本中,检查列的所有行。如果您想检查特定列,请告诉我。

参考:

  • getValues((

如果这不是你想要的结果,我很抱歉。

function hideColumnsDate(row) {
var row=row||1;
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getRange(row,1,1,sh.getLastColumn());
var vA=rg.getValues()[0];
var today=new Date().valueOf();
vA.forEach(function(e,i){
var rowdate=new Date(e).valueOf();
if(((today-rowdate)/86400000)>7) {
sh.hideColumns(i+1);
}
}); 
}

最新更新