首页 > 解决方案 > 试图用谷歌表格中的笔记制作任务跟踪器

问题描述

我正在尝试在谷歌表格中制作任务/项目跟踪器。

我想要发生的是——每行应该有一个指定的单元格(例如单元格 A5),当我输入一串文本时——它会转到某个单元格,即具有“注释”标题的单元格 A2 -- 在它前面添加日期 -- 单元格 A5 清除

这是可行的吗?

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-formula

解决方案


在第 5 列中输入字符串,在第 2 列中获取字符串,并在其前面加上日期。

这使用了一个简单的触发器,称为 onEdit 触发器。每当用户编辑单元格时它就会触发。在这种情况下,如果您编辑第 5 列中的单元格,它会将编辑字符串放入日期之前的同一行的第 2 列中。

您无法从脚本编辑器运行此函数,因为它没有收到事件对象,因此出现错误 cannot find getRange() of null。

只需将其粘贴到您的脚本编辑器中,如果您没有 sheet0,则编辑 Sheet0,然后更改第 3 行中的工作表名称。

function onEdit(e) {
  const sh = e.range.getSheet();
  if(sh.getName() == 'Sheet0' && e.range.columnStart == 5 && e.range.rowStart > 1 && e.value) {
    e.range.offset(0,-3).setValue(`${new Date()} ${e.value}`);
  }
}

这是在第 5 列中添加编辑单元格后工作表的样子

在此处输入图像描述

参考您的后续问题,这是脚本:

function onEdit(e) {
  const sh = e.range.getSheet();
  if(sh.getName() == 'Sheet0' && e.range.columnStart == 5 && e.range.rowStart > 1 && e.value) {
    e.range.offset(0,-3).setValue(e.range.offset(0,-3).getValue() + `\n${new Date()} ${e.value}`);
    e.range.setValue('');
  }
}

现在添加格式化日期:

function onEdit(e) {
  const sh = e.range.getSheet();
  if(sh.getName() == 'Sheet0' && e.range.columnStart == 5 && e.range.rowStart > 1 && e.value) {
    let dt = Utilities.formatDate(new Date(),Session.getScriptTimeZone(),"MMM dd, yyyy hh:mm a");
    e.range.offset(0,-3).setValue(e.range.offset(0,-3).getValue() + `\n${dt} ${e.value}`);
    e.range.setValue('');
  }
}

格式化日期代码


推荐阅读