首页 > 解决方案 > 谷歌表格中是否有一种方法可以根据其中一列内的下拉选项自动移动整行并更改日期

问题描述

我要做的是获取包含 A 到 N 列的谷歌表。我想要做的是获取行,除了第 1 行,它是所有列的标题,并让它们自动移动到底部基于 E 列中的下拉选项的同一电子表格。一旦选择了表示已完成的选项,我希望整行自动移动到电子表格的底部。除此之外,我还希望通过在该列中的日期添加一年来更新 D 列,即事件的截止日期,因为新的截止日期将是前一年的一年。这可能吗?谢谢您的帮助。

function onEdit(e) {
  const row = e.range.getRow();
  const col = e.range.getColumn();
  const as = e.source.getActiveSheet();
  if(as.getName() == "Sheet1" && col == 5 && row >1 && !as.getRange(row,col).getValue()=='MPS')
  {
    const row_new = as.getRange(row,1,1,col);
    row_new.copyTo(as.getRange(as.getLastRow()+1,1,1,col));
    as.deleteRow(row)
  }
}

标签: google-sheetsspreadsheet

解决方案


您应该更改比较第 5 列的方式

我使用了以下示例:

工作表示例

而不是 '==' 使用 '===' 比较,因为双 '=' 不是比较值,而是比较对象的类型。话虽如此,这是我的方法:

function onEdit(e) {
  const row = e.range.getRow();
  const col = e.range.getColumn();
  const as = e.source.getActiveSheet();
  const newDate = new Date();

  // No due date
  if (as.getRange(row,3).getValue() > newDate) {
    return;
  }

  if(as.getName() === "Sheet1" && col === 5 && row >1 && as.getRange(row,col).getValue()!=='MPS')
  {
    let row_new = as.getRange(row,1,1,col);

    // Add 1 day to your due date
    let oldValues = row_new.getValues();
    oldValues[0][3] = new Date(oldValues[0][3].setDate(newDate.getDate() + 1));

    // Set the new date
    row_new.setValues(oldValues);

    row_new.copyTo(as.getRange(as.getLastRow()+1,1,1,col));
    as.deleteRow(row);
  }
}

在最开始的日期之间进行比较以确定 D 列(日期)是否大于当前日期,然后为了设置新的日期,我使用班级日期并添加 1 天从 D 列中提取的日期。

参考


推荐阅读