Сценарий Google, как получить доступ и вставить при редактировании на определенный лист в другой электронной таблице? - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь создать сценарий, чтобы при внесении изменений в одну электронную таблицу соответствующий лист с тем же именем в другой электронной таблице получал те же изменения в том же месте, и поэтому я мог поместить одну партию сценария вкаждый и получить два связанных листа, которые влияют друг на друга.

это код:

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 в объекте Sheet

Невозможно найти функцию openById в объекте Spreadsheet

Я уже столько времени потратил на это иЯ чувствую, что ответ очень прост, но я был бы очень признателен за любой совет

Заранее спасибо

:)

1 Ответ

0 голосов
/ 15 марта 2019

Связанные таблицы с установленными триггерами 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...