首页 > 解决方案 > Google sheet + App Script:如果符合条件,则重命名每个工作表

问题描述

嗨,我正在使用此脚本通过在现有工作表名称前面插入“副本”来重命名每张工作表,其中单元格“B36”=“安全分析”中的文本和“K3”单元格中的日期早于 30 天. 我的问题与日期有关,我不知道该怎么做。单元格“K3”单元格的格式为“2021 年 8 月 1 日”我想我需要将“K3”中的日期转换为数字格式。任何帮助将不胜感激

function getSheet() {
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
    var sum = 0;
    for (var i = 0; i < sheets.length ; i++ ) {
        var sheet = sheets[i];
        var date = new Date();
        var ageInDays = 30;
        var threshold = new Date(
                      date.getFullYear(),
                      date.getMonth(),
                      date.getDate() - ageInDays)
                    .getTime();

        var val = sheet.getRange('K3').getValue();
        var val2 = sheet.getRange('B36').getValue();
       
       


        if (val >= threshold && val2 == 'SAFETY ANALYSIS') {
            var sheetName = sheet.getName()
            sheet.setName('Copy Of '+sheetName)  
        }       
    }

  
}

标签: datetimegoogle-apps-scriptgoogle-sheets

解决方案


您可能希望将从单元格中获得的值包装K3Date()构造函数中。这应该适用于电子表格日期以及看起来像日期的文本字符串。

我认为您val >= threshold以错误的方式进行比较。尝试这样的事情:

function renameOldSafetyAnalysisSheets() {
  const timeLimit = 30 * 24 * 60 * 60 * 1000; // 30 days
  const now = new Date();
  const sheets = SpreadsheetApp.getActive().getSheets();
  sheets.forEach(sheet => {
    if (sheet.getRange('K3').getValue() !== 'SAFETY ANALYSIS') {
      return;
    }
    const date = new Date(sheet.getRange('B36').getValue());
    if (!date.getTime()
      || now.getTime() - date.getTime() < timeLimit) {
      return;
    }
    try {
      sheet.setName('Copy of ' + sheet.getName());
    } catch (error) {
      ;
    }
  });
}

推荐阅读