更改GoogleApps脚本以从单独的工作表中获取

时间:2017-01-13 20:09:06

标签: google-apps-script google-sheets

目前使用此脚本获取时间戳

function onEdit(e) {
  var s = SpreadsheetApp.getActiveSheet();
  if (s.getName() == 'Subsidy Portions') {
    var colWatch = 6;      // column to watch, 5 = "E"
  var colRecord = 9;     // column for timestamp,  6 = "F"
  if (e.range.getColumn() == colWatch) {
    e.range.offset(0, colRecord - colWatch).setValue(new Date());
  }
  }}

但是,现在需要在同一个文件中引用不同的工作表。

colWatch = 2

上需要NotescolRecord = 9

Subsidy Portions

谢谢!

1 个答案:

答案 0 :(得分:1)

如果我理解正确,当注释表中的第2列发生更改时,您希望在补贴部分表中向第9列添加时间戳。为此,您需要添加另一个IF()部分,因为每次编辑文件时都会运行提供的代码(未经测试):

function onEdit(e) {
  var s = SpreadsheetApp.getActiveSheet();
  if (s.getName() == 'Subsidy Portions') {
    var colWatch = 5;      // column to watch, 5 = "E"
    var colRecord = 8;     // column for timestamp,  6 = "F"
    if (e.range.getColumn() == colWatch) {
      e.range.offset(0, colRecord - colWatch).setValue(new Date());
    }
  }

  if (s.getName() == 'Notes') {
    var colWatch = 2;      // column to watch, 5 = "E"
    var colRecord = 9;     // column for timestamp,  6 = "F"
    if (e.range.getColumn() == colWatch) {
      var sReceivingSheet = SpreadsheetApp.getSheetByName('Subsidy Portions');
      var myRow = e.range.getRow();
      var editRange = sReceivingSheet.getRange(myRow, colRecord);
      editRange.setValue(new Date());

    }
  }

}

<强>解释

将此s设置为活动工作表,即已编辑以触发该功能的工作表。 s.geName获取该工作表的名称,并对其进行测试,以查看该名称是否与{}内代码的名称相匹配。

if (s.getName() == 'Subsidy Portions') {
  // Code...
}

备注的IF部分内,这会将名为 Subsidy Portions 的工作表加载到sReceivingSheet中,获取在备注中编辑的行表格,并假设我们正在编辑补贴部分中的同一行。然后,它使用该列和列进行编辑以获取单个单元格的范围,将其保存在editRange中,然后将新日期添加到该单元格。

var sReceivingSheet = SpreadsheetApp.getSheetByName('Subsidy Portions');
var myRow = e.range.getRow();
var editRange = sReceivingSheet.getRange(myRow, colRecord);
editRange.setValue(new Date());

如果您需要在第二部分中编辑另一行,我们需要更多代码来获取所有数据并循环直到找到正确的行才能找到该行。我建议在Tutorial: Simple Mail Merge

的示例代码中查看getRowData()函数