Перейти к последнему положению при открытии Google Sheet - PullRequest
2 голосов
/ 31 марта 2020

Я собираюсь получить простую функцию, которая перейдет к последней ячейке в GoogleSheet, откуда я закрыл файл. Я написал этот сценарий:

function onEdit(e) {
  var ss = e.source
  var sheet = ss.getActiveSheet();
  var cell = ss.getActiveCell();
  var row = cell.getRow();
  var column = cell.getColumn();
  var sheet_name = sheet.getSheetName();
  var scriptProperties = PropertiesService.getScriptProperties();

  scriptProperties.setProperty('row',row);
  scriptProperties.setProperty('column',column);
  scriptProperties.setProperty('sheet name',sheet_name);
}

function onOpen(e) {
  var properties = PropertiesService.getScriptProperties();

  var ss = e.source;
  var sheet_name = properties.getProperty('sheet name');
  var sheet = ss.getSheetByName(sheet_name);
  var row = properties.getProperty('row');
  var column = properties.getProperty('column');
  var cell = sheet.getRange(row,column);

  ss.setActiveSheet(sheet);
  ss.setActiveRange(cell);  
}

Скрипт записывает значения в поле Property, но когда я открываю файл, ничего не происходит.

Для лучшей демонстрации вы можете найти мой скрипт здесь: https://docs.google.com/spreadsheets/d/1cAsWRNl9f5jxjvgDh17l4C43bhxJdulWyaNXmLwuab0/edit?usp=sharing

Кто-нибудь знает, где моя ошибка?

Спасибо

1 Ответ

2 голосов
/ 31 марта 2020

Как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Проблема и обходное решение:

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

Когда открывается электронная таблица, row и column извлекаются из PropertiesService. В этом случае row и column являются строковыми значениями. При этом возникает ошибка в var cell = sheet.getRange(row,column); в функции onOpen. Потому что row и column не являются числовыми значениями.

Я думаю, что когда вы выключаете среду V8 в редакторе сценариев, var cell = sheet.getRange(row,column); работает. (Из сценария вашей общей таблицы я подумал, что вы используете сценарий с V8.) Но когда используется среда выполнения V8, возникает ошибка. Я думаю, что это может быть спецификацией V8.

Итак, чтобы избежать этой проблемы, как насчет следующей модификации?

Модифицированный скрипт:

От:
var cell = sheet.getRange(row,column);
Кому:
var cell = sheet.getRange(Number(row), Number(column));

или

Отключить среду выполнения V8 в редакторе сценариев.

Ссылка:

  • getRange (строка, столбец)

    • row, Integer, Индекс строки возвращаемой ячейки; индексация строк начинается с 1.
    • столбец, целое число, индекс столбца возвращаемой ячейки; индексация столбцов начинается с 1.

Если я неправильно понял ваш вопрос, и это не то направление, которое вам нужно, я приношу свои извинения.

...