首页 > 解决方案 > 编写脚本来更新重复任务

问题描述

我正在尝试准备工作表,该工作表将自动将已完成的任务从选项卡移动到另一个选项卡,并从现在开始将任务的日期更新为一个。

我想要达到的目标:

  1. 每当列 E更新为时,月度表中的第 2 行应流向已完成的任务'Done'
  2. 已完成的任务选项卡将有点像档案,以帮助我了解我过去完成项目任务的情况。

您能否查看我的脚本并帮助我找出问题所在?

这是表格: https ://docs.google.com/spreadsheets/d/12CFtKbmgyrKBsRJaPsQT2O_H39gkD_ODVEOHt3XlfOU/edit?usp=sharing

这是脚本:

    function onEdit(e) {

    var row = e.range.getRow();
    var col = e.range.getColumn();
    var spreadsheet = SpreadsheetApp.getActive();
    var sheet = spreadsheet.getSheetByName("Completed Tasks");
    var lastRow = sheet.getLastRow();
    var activeRow = spreadsheet.getRowHeight(row);
    var active_range = sheet.getActiveRange();

    if(col = 10 && row > 1 && e.source.getActiveSheet().getName() === "Monthly Sheet" && 
    e.source.getActiveSheet().getRange(row,10).getValue() === "Done" && 
    e.source.getActiveSheet().getRange(row,10).getValue() !== ""  ) {
 

 
  spreadsheet.getRange(active_range.getRowIndex() + ":" + active_range.getRowIndex()).activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Completed Tasks'), true);
  spreadsheet.getRange(active_range.getRowIndex() + ":" + active_range.getRowIndex()).activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  }
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


  • 您的代码的主要问题是它没有检查E 列,即col == 5.
  • 我还删除了一些不必要的代码并进行了一些修改以产生所需的结果。

解决方案:

function onEdit(e) {

const row = e.range.getRow();
const col = e.range.getColumn();
const sheet = e.source.getSheetByName("Completed Tasks");
const lastRow = sheet.getLastRow();
const active_sheet = e.source.getActiveSheet();

if(col == 5 && row > 1 && active_sheet.getName() === "Monthly Sheet" && e.range.getValue()=='Done') {
  
 var ref_date =  active_sheet.getRange(row,4).getValue();
 ref_date.setDate(ref_date.getDate() + 30);
 active_sheet.getRange(row,4).setValue(ref_date); 
 active_sheet.getRange(row,col+1).setValue(new Date());
 const values = active_sheet.getRange(row,1,1,active_sheet.getLastColumn()).getValues();
 sheet.getRange(lastRow+1,1,values.length,values[0].length).setValues(values);
 active_sheet.getRange(row,1,1,active_sheet.getLastColumn()).clearContent(); 
  }
}

推荐阅读