首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除今天日期之前的列

删除今天日期之前的列
EN

Stack Overflow用户
提问于 2022-04-14 15:57:47
回答 1查看 67关注 0票数 0

我已经挣扎了几个星期了。我有posted a question here a couple days a go,但我还没有找到解决方案。可能是因为,事实上,这是一个2-3项任务的问题,但我的错误并没有很好地解释。因此,我决定发布另一个带有一个( 2-3)更简单的任务。

因此,下面有一个脚本,在示例表中删除今天日期之前的列。该脚本运行良好,但我有两个问题。

首先..。如果旧的日期/列的数量是一个,它就能正常工作。它只删除前一天,而不是前3列(A,B&C在样本表),我想保留。如果它们更多地是一个旧日期,那么脚本将删除今天日期前后的几个列/日期。我想要的是只删除今天日期之前的所有列/日期,而不是我想保留的前3列(样本表中的A、B&C)。

第二个问题有点奇怪。目前,我正在从自定义菜单(示例表中的“我的工具”)运行脚本。现在,当从自定义菜单或使用脚本编辑器中的" run“按钮运行脚本时,它就工作了。当我试图添加时间驱动触发器时(不是以编程方式)。我不知道如何运行它,所以每24小时运行一次,然后我收到一个脚本错误,其中包含以下消息: Exception: Range不在deleteColumnsDate中(代码:14:49)。

这是我工作表的一个示例:https://docs.google.com/spreadsheets/d/1NJvcLxwc96411-Sl_aTu1d-J5gQvqlZjPUQbWZoRqBM/edit?usp=sharing

这是我目前正在使用的脚本:

代码语言:javascript
复制
function onOpen()
    {
      var ui = SpreadsheetApp.getUi();
      ui.createMenu('My Tools')
            .addItem('Delete Older Dates','deleteColumnsDate')
            .addToUi();
    }

  function deleteColumnsDate(row)
    {
      var row = (typeof(row) !== 'undefined') ? row : '3';
      var day = 86400000;
      var today = new Date().getTime();
      var rng = SpreadsheetApp.getActiveSheet().getRange(row + ':' + row);
      var rngA = rng.getValues();
      for(var i = 1; i < rngA[0].length ;i++)
    {
      if(isDate(rngA[0][i]) && (((today - new Date(rngA[0][i]).getTime())/day) > 1 ))
        {
          SpreadsheetApp.getActiveSheet().deleteColumns(i + 1);
        }

      }
    }

    function isDate (x)  
    { 
      return (null != x) && !isNaN(x) && ("undefined" !== typeof x.getDate); 
    }

那么,我在这里做错了什么?是否有可能使此过程每24小时完全自动运行?

提前谢谢你

内苏斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-14 16:55:53

当您放置时间触发器时,不能使用getActiveSheet()。相反,应该使用SpreadsheetApp.openById( ID )

您将在文档的URL中找到您的ID,如: docs.google.com/spreadsheets/d/abc1234567/edit#gid=0

https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#openbyidid

编辑:

库珀提起这件事时,我忘了一些东西。试着这样做:

代码语言:javascript
复制
var ss = SpreadsheetApp.openById( [SHEET ID] );
var sh = ss.getSheetByName( [SHEET NAME] ); //delete column here
var rng = sh.getRange(row + ':' + row);

功能齐全:

代码语言:javascript
复制
  function deleteColumnsDate() {

    var day = 86400000;
    var today = new Date().getTime();

    var ss = SpreadsheetApp.openById(" [SHEET ID]");
    var sh = ss.getSheetByName(" [SHEET NAME] ");
    var rng = sh.getRange('A1:Z1'); // change if you need larger
    var rngA = rng.getValues();

    var nb_to_delete = 0;
    for(var i = 1; i < rngA[0].length ;i++) { // start colonne B
      if(isDate(rngA[0][i]) && (((today - new Date(rngA[0][i]).getTime())/day) > 1 )){
        nb_to_delete++;
      }
    }
    sh.deleteColumns(2, nb_to_delete);
  }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71874468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档