Есть ли команда Google Script для перезагрузки боковой панели Google? - PullRequest
0 голосов
/ 03 июля 2019

Я написал скрипт Google, который помещает листы (т. Е. Вкладки) в таблицу Google в альфа-порядке.

Проблема в том, что горизонтальный список вкладок внизу страницы электронной таблицы не отображается (слева направо) в альфа-порядке.

Вкладка, которая начиналась как «firstSheet», обычно заканчивается после того, как скрипт выполняется где-то посередине «пакета», и оттуда начинается алфавитизация и «оборачивается» до последней вкладки.в альфа-списке как раз перед этим.(Я говорю «в общем», потому что иногда он появляется полностью слева - в зависимости от того, с чего он начинался.)

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

Базовый сценарий, который я использую, поставляется с подсказкой @ Serge-insas ( Метод "moveActiveSheet" не работает должным образом в скрипте Google Apps (JavaScript) ).И единственное реальное изменение, которое я сделал в этом сценарии, - это добавление строки для отображения первой альфа-вкладки в конце процесса.

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

Сценарий меню

function onOpen() {
   var ui = SpreadsheetApp.getUi();
   ui.createMenu('Custom')
      .addItem('Sort Sheets', 'sortSheets')
      .addToUi();

function

function sortSheets () {
 var html = HtmlService.createHtmlOutputFromFile('index')
      .setTitle('Read Me')
      .setWidth(300);
  SpreadsheetApp.getUi()
      .showSidebar(html);  var ss = SpreadsheetApp.getActive();

  var sheets = ss.getSheets();
  var firstSheet = sheets[0].getName();
  var numSheets = ss.getNumSheets();
  var sheetNameArray = [];
    for (var i = 0; i < numSheets; i++) {     
      sheetNameArray.push(sheets[i].getName());
    }
  var sheetNameArray = sheetNameArray.sort(); 
  for(var s=0 ; s < numSheets ; s++){    
    ss.setActiveSheet(ss.getSheetByName(sheetNameArray [s]));
    SpreadsheetApp.flush();
    Utilities.sleep(50);
    ss.moveActiveSheet(numSheets);
    SpreadsheetApp.flush();
    Utilities.sleep(50);
  }
  ss.setActiveSheet(ss.getSheetByName(firstSheet));
}

html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>

      <center><font color = red>IMPORTANT<br><br> 
    Once the routine has run (i.e., the tabs stop moving around) and you see the "saved" notification at the top of the page...<br><br>

     Right click anywhere in this sidebar. Then select the "reload" menu item to reset sheet tabs in alpha order.</center></font> <br> <br>
  </body>
</html>

Итак, мой вопрос: есть ли способ сделать так, чтобы перезагрузка происходила помимо боковой панели?Т.е. есть ли какая-нибудь команда, которую я могу использовать в своем сценарии, вместо того, чтобы использовать довольно запутанный подход боковой панели?Тот факт, что в боковой панели есть функция перезагрузки, дает мне надежду на программный способ ее достижения, хотя, просматривая документацию по Google GAS, я не смог ее найти.

1 Ответ

0 голосов
/ 03 июля 2019

Похоже, ваш код должен работать.Не уверен, почему это не так.Однако это более простой способ заказа листов.

function sortSheets()
{
  // get the current spreadsheet
  var ss = SpreadsheetApp.getActive();

  // get an array of sheets
  var allSheets = ss.getSheets();

  // sort the array by sheet name
  allSheets.sort(function(s1, s2){
    if(s1.getName().toLowerCase() < s2.getName().toLowerCase()) return -1;
    if(s1.getName().toLowerCase() > s2.getName().toLowerCase()) return 1;
    return 0;
  });

  // move the sheet into where they should be based on sorted order
  allSheets.forEach(function(sheet, sheetIndex){
    ss.setActiveSheet(sheet);
    ss.moveActiveSheet(sheetIndex + 1);
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...