Google脚本,如何访问并粘贴编辑到另一个电子表格中的特定工作表?

时间:2019-03-15 01:44:34

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

我正在尝试创建一个脚本,以便在一个电子表格中进行更改时,另一电子表格中具有相同名称的相应工作表在同一位置收到相同的更改,因此我可以在其中放置很多脚本并获得两个相互影响的链接表。

这是代码:

var targetID = 'ID of the sheet';
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();

function onEdit(e){
  var range = e.range;
  var value = e.value;
  var row = range.getRowIndex();
  var column = range.getColumnIndex();
  exportValue(row,column,value)
} 

function exportValue(row,column,value) {
  //(**this is the point where it breaks**)
  var s = SpreadsheetApp.openById(targetID).getSheetByName(targetSheet);
  var target = s.getRange(row, column);
  target.setValue(value);
}

在我的版本中,我在每行之间插入日志以查看失败的地方,并到达我放置了“ 这是它破裂的地方”的行,然后没有之后返回任何东西。

由于尝试这样做,我试图通过拉出所有变量来打开另一个文件,但我无法使其正常工作。

它正在处理的当前错误消息是:

  

在对象表中找不到函数getSheetByName

     

在对象电子表格中找不到函数openById

我已经花了很多时间,我觉得答案很简单,但是我非常感谢任何建议

预先感谢

:)

1 个答案:

答案 0 :(得分:0)

具有可安装的onEdit()触发器的链接电子表格

我通过使用可安装的onEdit(e)触发器使它起作用。

function Linked1Edit(e){
  var ss=SpreadsheetApp.openById('The Other Spreadsheets ID');
  var sh=ss.getSheetByName(e.range.getSheet().getName());
  var rg=sh.getRange(e.range.rowStart,e.range.columnStart);
  rg.setValue(e.value);
} 

我分别调用了一个Linked1Edit(e)和另一个Linked2Edit(e),并为每个对象创建了一个可安装的onEdit(e)触发器,现在它们可以互相写入。 不幸的是,它仅适用于单值更改。

以下脚本将允许您一次更改多个值。

function Linked1Edit(e){
  var ss=SpreadsheetApp.openById('The Other Spreadsheet ID');
  var sh=ss.getSheetByName(e.range.getSheet().getName());
  var rg=sh.getRange(e.range.rowStart,e.range.columnStart,e.range.rowEnd-e.range.rowStart+1,e.range.columnEnd-e.range.columnStart+1);
  var vA=e.range.getValues();
  rg.setValues(vA);
} 

创建触发器

选择当前项目的触发器

enter image description here

点击添加触发器:

enter image description here

创建触发器对话框:

enter image description here

您还可以在代码中创建触发器。参见ScriptApp Class