Существует ли код для Google Sheets, который будет перемещать каждую вкладку определенного цвета в конец моего списка вкладок? - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть Google Sheet с более чем 100 вкладками (рабочими листами).Я окрашиваю свои вкладки в цвет, основываясь на том, где они находятся в моем рабочем процессе (Желтый - я собираю данные, Зеленый - готов для моего партнера, чтобы исследовать, Синий - мой партнер исследует, Красный - мертвый контракт).Мы добавляем несколько вкладок ежедневно, и список вкладок быстро растет.Мой партнер хочет, чтобы все мертвые сделки (красные вкладки) были в конце списка.Перетаскивание вкладок одна за другой занимает слишком много времени.Мне нужен сценарий (или любой другой метод работы), чтобы взять все вкладки, которые окрашены в красный цвет, и переместить их в конец списка вкладок.

До сих пор единственным вариантом, который я нашел, был код VBA.для Excel.Насколько я могу судить, VBA не работает с Google Sheets, потому что это код, который только Microsoft использует SMH.

Я не знаю достаточно о jquery или сценариях, чтобы написать свой собственный код, иЯ не смог найти ответ от Google, поэтому у меня нет результатов теста.Кроме того, на моем листе есть конфиденциальные данные, поэтому я не могу предоставить их в качестве тестовых данных, но вопрос должен быть простым (для тех, кто умеет писать сценарии) для воспроизведения без использования тестового листа.Просто создайте пустой лист Google с 3 или более вкладками, закрасьте первую 1 красным, а затем работайте над сценарием, который переместит эту красную вкладку до конца.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Перемещение листов / вкладок одного цвета в конец списка вкладок с использованием API Google Sheets версии 4

function moveSheetsOfAColorToEnd(color) {
  var color=color || '#ff0000';
  if(color) {
    var ss=SpreadsheetApp.getActive();
    var shts=ss.getSheets();
    for(var i=0;i<shts.length;i++) {
      if(shts[i].getTabColor()==color) {            
        Sheets.Spreadsheets.batchUpdate(
          {
            requests:[
              {
                "updateSheetProperties": 
                {             
                  "properties":
                  {
                    "sheetId":shts[i].getSheetId(),
                    "index": shts.length
                  },
                  "fields": "index"                      
                }
              }
            ]
          }, ss.getId());
      }
    }
  }
}

Вам потребуется включить Sheets API v4 в меню ресурсов, а также в облачной платформе Google .

Справочник по API листов Google v4

Этот вопрос мне очень помог.

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

Вот еще один способ сделать то же самое:

function moveSheetsOfAColorToEnd1(color) {
  var color=color || '#ff0000';
  if(color) {
    var ss=SpreadsheetApp.getActive();
    var shts=ss.getSheets();
    for(var i=0;i<shts.length;i++) {
      if(shts[i].getTabColor()==color) {
        var shtsPropReq=Sheets.newUpdateSheetPropertiesRequest();
        shtsPropReq.properties=Sheets.newSheetProperties();
        shtsPropReq.properties.sheetId=shts[i].getSheetId();
        shtsPropReq.properties.index=shts.length;
        shtsPropReq.fields="index";
        var requests=[Sheets.newRequest()];
        requests[0].updateSheetProperties=shtsPropReq;
        var batchUpdateRequest=Sheets.newBatchUpdateSpreadsheetRequest();
        batchUpdateRequest.requests=requests;
        Sheets.Spreadsheets.batchUpdate(batchUpdateRequest, ss.getId());
      }
    }
  }
}

Этот метод следует той же схеме, что и пример скрипта приложений, найденный на этой странице .

Есть несколько дополнительных примеров здесь

0 голосов
/ 10 апреля 2019

Псевдокод:

You need a loop to go through each tab in the spreadsheet
Inside that loop you want to check the color (with "getTabColor()")
If the color is red, move them to the end (or hide, them, I'd personally hide them, with "hideSheet()")

Я не уверен, насколько это устойчиво, существует ограничение на количество вкладок в электронной таблице (я полагаю, это 160).

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