【问题标题】:How to move a row from one google spreadsheet to another based on a value in a cell?如何根据单元格中的值将一行从一个谷歌电子表格移动到另一个?
【发布时间】:2016-08-02 13:20:06
【问题描述】:

我的脚本应该根据单元格中的值将一行从一个谷歌电子表格移动到另一个。它没有这样做,我认为这是因为 onEdit() 函数但无法弄清楚。我在同一个电子表格中找到了不同工作表的解决方案,但在不同的电子表格中却没有。我的代码如下。

function onEdit(e) {

  var sss = SpreadsheetApp.getActiveSpreadsheet();
  var ss = e.source.getActiveSheet();
  var r = e.source.getActiveRange();
  if(s.getName() == "source_sheet" && r.getColumn() == 7 && r.getValue() == "Pavlovo"){

  //Get full range of data
  var SRange = ss.getRange(1, 3, 1, 5);
  //get A1 notation identifying the range
  var A1Range = SRange.getA1Notation();
  //get the data values in range
  var SData = SRange.getValues();

  // tss = target spreadsheet 
  var tss =  SpreadsheetApp.openById('1_t7BDCWgHJDip_cndzVashxLDQ_pVS6obi3I9TB_EJI'); 

  var ts = tss.getSheetByName('Vitosha'); // ts = target sheet
  //set the target range to the values of the source data
  ts.getRange(A1Range).setValues(SData);
  }

}  

【问题讨论】:

  • “移动”是什么意思?您想从当前工作表中删除并将其粘贴到新工作表中吗?
  • 没错。要将其从母电子表格中删除并将其添加到新电子表格中!
  • 您的尝试有什么问题?如果要从工作表中删除行,可以使用: sheet.deleteRow(1)
  • 删除不是问题。 Marshmallow 在下面说的是问题

标签: javascript google-apps-script google-sheets


【解决方案1】:

您正在使用简单的触发器onEdit。此类触发器未经授权运行,因此受制于多个restrictions,例如:

他们可以修改他们绑定的文件,但不能访问其他文件,因为这需要授权。

这就是SpreadsheetApp.openById 无法在您的代码中执行的原因。

解决方案:将函数重命名为 onEdit 以外的名称,并添加一个 installable trigger 在编辑时运行。可安装的触发器以您(即创建它的用户)身份运行,因此可以访问您可以访问的任何文件。

【讨论】:

  • 谢谢,但你能用可安装的触发器分享代码
猜你喜欢
  • 2019-02-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2020-10-29
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多