Google Sheet脚本按日期隐藏列

时间:2019-10-16 21:21:17

标签: google-apps-script google-sheets

我实质上是在尝试完全完成this question中的操作,但是要使用列而不是行。当我按原样运行脚本时,它工作正常。但是出于某种原因,仅仅将所有对列的引用切换为行(反之亦然)对我来说是行不通的,而且我无法弄清楚出了什么问题。

仅供参考,这是我的目的

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); 
    }

2 个答案:

答案 0 :(得分:1)

修改脚本后,如何进行修改?请认为这只是几种修改之一。

修改点:

  • 根据您的情况,从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]
  • 在上面修改的脚本中,检查了列的所有行。如果要检查特定的列,请告诉我。

参考:

如果这不是您想要的结果,我表示歉意。

答案 1 :(得分:0)

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);
    }
  }); 
}