Как изменить лист, который просматривает пользователь, с помощью скрипта приложения Google? - PullRequest
1 голос
/ 29 октября 2019

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

Я просмотрел всю документацию, но не могу найти какие-либо методы, которые действительно вызывают изменение пользовательского интерфейса. Например, getActiveSheet (), setActiveSheet () или setActiveRange () или activ () изменяют только то, на чем фокус кода, а не то, что видит пользователь.

Здесь есть «дублирующий» вопрос: Как в Google Sheets изменить лист, который видит пользователь?

, но использование setActiveSheet () не приводит кв любых изменениях.

function ChangeSheet(){
var ss = SpreadsheetApp.openById("exampleID");
var MainBoardSheet = ss.getSheetByName('Main board');
ss.setActiveSheet(MainBoardSheet);
}

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

Ответы [ 3 ]

1 голос
/ 29 октября 2019

Такие функции, как setActiveSheet (), setActiveRange (), activAsCurrentCell () изменят представление пользовательского интерфейса, но только в активном сеансе пользователя, в котором выполняется сценарий, поэтому необходимо использовать Spreadsheet.getActiveSpreadsheet ();вместо openById ().

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

Если вы пытаетесь выполнить запуск другим способом, когда код не выполняется в контексте текущего сеанса пользователя, вы не увидите никакого влияния на сторону пользовательского интерфейса.

/* this does not work */
function getByIDJumpByActive(){
  var spreadsheet=  SpreadsheetApp.openById('1u3d8Auoi3CJNqZgLiui2oKIB3FDYOwAHLq59zWY5fNk');
  var sheet = spreadsheet.getSheetByName('Sheet3');
  spreadsheet.setActiveSheet(sheet);
  spreadsheet.toast('opened by id and jumped by active sheet');
}

/* the below all work within the active user session. */
function jumpByRange() {
  var spreadsheet=  SpreadsheetApp.getActiveSpreadsheet();
  var range = spreadsheet.getRange('Sheet2!A1');
  range.activateAsCurrentCell();
  spreadsheet.toast('jumped by active cell');
}

function jumpByActive(){
  var spreadsheet=  SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('Sheet3');
  spreadsheet.setActiveSheet(sheet);
  spreadsheet.toast('jumped by active sheet');
}

function onOpen(){
  var doc = SpreadsheetApp.getUi();
  var menu = doc.createMenu('Switch');
  menu.addItem('by range','jumpByRange');
  menu.addItem('by active','jumpByActive');
  menu.addItem('get by ID and jump by active','getByIDJumpByActive');
  menu.addToUi();
}

function onEdit(){
  jumpByActive();
}
1 голос
/ 29 октября 2019

Я почти уверен, что метод RANGE.activateAsCurrentCell () приведет пользователя туда, даже если диапазон находится в другом листе:

https://developers.google.com/apps-script/reference/spreadsheet/range#activateAsCurrentCell()

0 голосов
/ 29 октября 2019

В вашем документе электронной таблицы перейдите:

Инструменты -> Редактор скриптов

Тогда у вас будет редактор скриптов приложений, куда вы можете поместитьэтот код, и он изменит лист, как вы хотели:

function ChangeSheet(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var changeSheet = ss.getSheetByName('Main board');
ss.setActiveSheet(changeSheet);
}

Дайте мне знать, если он работает для вас

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