Установлен на триггере редактирования ... какой лист редактировался? - PullRequest
1 голос
/ 01 февраля 2011

Пример:

https://spreadsheets.google.com/ccc?key=0Am8IA9FchrLbdHlkbWFMOWtZa1Y0RWpMNUV5Q3RMaVE&hl=en&authkey=CPXlr5UL

Когда вы устанавливаете триггер при редактировании, ваша функция проходит начальные и конечные строки и столбцы. Но не то, какой лист был отредактирован.

Естественно, моей первой мыслью было получить SpreadsheetApp (). GetActiveSheet (), но это не сработало.

Редактировать любую ячейку в электронной таблице примера. Установленный триггер при редактировании заполнит значения для Sheet1, сообщая вам, что вы редактировали. Теперь переключитесь на лист 2 или лист 3 и отредактируйте что-нибудь. Это всегда сообщает, что Лист1 был отредактирован.

Код триггера:

function my_on_edit(e) {

  //the object passed in, e, doesn't know what sheet was edited. Really!

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheetname = ss.getName();

  var thesheet = ss.getActiveSheet();

  var sheetname = thesheet.getName();

  //Tell us what was edited, please.
  ss.getSheetByName("Sheet1").getRange("A2:E2").setValues([[ spreadsheetname, sheetname, e.range.rowStart, e.range.columnStart, Utilities.jsonStringify(e)]]);

}

Как мне отредактировать лист? Это моя ошибка или это ошибка? Или недостаток в том, как они делают обработку событий?

Ответы [ 3 ]

1 голос
/ 15 декабря 2012

Я нашел этот обходной путь на многих форумах, но когда я пытался использовать его, я продолжал получать e.gridId = undefined.После того, как я ударился головой и выдернул волосы, я попытался найти альтернативу и нашел решение.Поэтому я решил поделиться своим маленьким открытием:

e.range.getGridId() теперь возвращает то же значение.Поэтому в приведенном выше сценарии измените вторую строку на:

var s = findSheetById_(e.range.getGridId());

, чтобы она работала, если вы получаете ту же неопределенную проблему, которую я сделал.

0 голосов
/ 14 февраля 2015

Код не работает, потому что объекты e.range и e.value не дают никаких объектов для устанавливаемого триггера (не определено)!Это было доведено до сведения Google, но после сообщения об этом в Google-script-проблемы !

никаких действий не предпринимается.
0 голосов
/ 22 февраля 2011

Я поставил этот вопрос на справочный форум сценариев приложений Google:

http://www.google.com/support/forum/p/apps-script/thread?tid=535e1d8ff33a731f&hl=en

Энрике Абреу ответил с ответом;что это недостаток того, как Google Apps Script делает установленные триггеры onedit.Но он также дал недокументированный обходной путь:

Есть две недокументированные вещи, которые я использую, чтобы узнать, какой лист был отредактирован.Сначала, просмотрев параметр, переданный в устанавливаемую функцию редактирования, я обнаружил параметр gridId, который является идентификатором листа (то же число, которое мы видим в url ... # gid =).И sheet.getSheetId (), который отображается в редакторе кода, но не в документах.Вот пример:

function my_on_edit(e) {
  var s = findSheetById_(e.gridId);
  var r = e.range;
  s.getRange(r.rowStart, r.columnEnd+1).setValue( s.getName() );
}

function findSheetById_(id) {
  var sheets = SpreadsheetApp.getActive().getSheets();
  for( var i in sheets )
    if( sheets[i].getSheetId() == id )
      return sheets[i];
  throw 'Unable to find sheet with id: '+id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...