Как исключить определенные листы из скрипта?

function sheetnames() {
  var out = new Array()
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var exclude = ["Contractors", "All Group Bids", "About Me","Bid Summary"] // these are the sheet names I do not want 
  var groupsheets = (sheets != exclude); // I'm not sure if this is formatted properly 


  for (var i=0 ; i<groupsheets.length ; i++) 

  {out.push( [ groupsheets[i].getName() ] )}

  return out 
}

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

Пожалуйста, скопируйте и вставьте свой код вместо изображения

FortyTwo 18.07.2019 18:34

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

A.E. 18.07.2019 20:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
744
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Цель:

Возвращает массив имен листов, не найденных в массиве исключений.


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

function sheetNames() {
  var out = [];
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var exclude = ["Contractors", "All Group Bids", "About Me", "Bid Summary"];
  for (i = 0; i < sheets.length; i++) {
    if (exclude.indexOf(sheets[i].getName()) === -1) {
      out.push(sheets[i].getName());
    }
  }
  return out;
}

Объяснение:

Я просмотрел массив листов, используя array.indexOf(), чтобы сравнить их. Все, что возвращает -1 (нет соответствия), добавляются в массив out.


Ссылка:

  • array.indexOf()

Спасибо, но когда я вставил его и сохранил, все имена листов все еще выводились. Ваш процесс имеет гораздо больше смысла, чем то, что я делал.

A.E. 18.07.2019 21:13

Убедитесь, что ваш массив exclude имеет точные имена листов, без лишних пробелов и в идеальном регистре.

ross 18.07.2019 21:19

Это работает, когда я тестировал его на новом листе. Но на нужном мне листе это не работает. Все названия листов правильные. У меня также есть функция ниже, работающая в другом скрипте. Это повлияет на это?

A.E. 19.07.2019 00:23

Для чего вы используете функцию исключения листов? Не могли бы вы показать остальную часть вашего кода?

ross 19.07.2019 00:28

Другой код автоматически меняет имя листа, если обновляется определенная ячейка.

A.E. 19.07.2019 00:29

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

A.E. 19.07.2019 00:31

function onEdit () { лист var = SpreadsheetApp.getActiveSheet (); var oldsheetname = SpreadsheetApp.getActiveSheet().getName(); var newsheetname = SpreadsheetApp.getActiveSheet().getRange(2,1).getValue(); вар информационные листы; {["Подрядчики", "Все групповые ставки", "Обо мне", "Сводка ставок"]}; {for (var i = 0; i < oldsheetname.length; i++) if (oldsheetname == infosheets){sheet.setName(oldsheetname);} if (oldsheetname !== infosheets && oldsheetname !== newsheetname){sheet.setName (имя нового листа);} } }

A.E. 19.07.2019 00:31

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

A.E. 19.07.2019 00:33

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

ross 19.07.2019 00:42

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

A.E. 19.07.2019 01:00

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

A.E. 19.07.2019 01:01

Мой сценарий SheetNames должен использоваться на вкладке «Сводка ставок», потому что я хочу, чтобы в пустом столбце отображались только определенные листы. Затем я собираюсь использовать функцию ЗАПРОС, чтобы сопоставить значения со столбцами на остальной части листа.

A.E. 19.07.2019 01:04

Итак, вы хотите, чтобы sheetNames возвращал список имен ваших листов, разделенных запятыми?

ross 19.07.2019 01:16

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

A.E. 19.07.2019 01:21

Функция, которую я предоставил, делает именно это, я только что проверил ее сам.

ross 19.07.2019 01:21

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

A.E. 19.07.2019 01:27

Поделитесь своим листом, если это возможно, и я посмотрю для вас.

ross 19.07.2019 01:38

В конце имен моих листов были лишние пробелы, которые я не мог видеть. Теперь это работает! Большое спасибо и много благословений вам!

A.E. 19.07.2019 11:02

Да, как правило, для таких вопросов! Рад, что смог помочь.

ross 19.07.2019 11:11

@А.Э. не забудьте отметить ответ как правильный, если предоставленное решение достаточно ответило на ваш вопрос. Это не является обязательным, но может помочь пользователям найти решение в будущем.

ross 19.07.2019 17:22

Вот более сжатая версия с использованием функций es6+. Это не обязательно «лучше», но мне всегда легче делать ошибки, работая с императивными циклами.

internetross 13.06.2020 02:51

Вот более сжатая версия с использованием функций es6+. Это не обязательно «лучше», чем https://stackoverflow.com/a/57100899/181344, но я всегда нахожу, что при работе с императивными циклами легче допустить ошибку:

function sheetNames() {
  let excluded = ["Contractors", "All Group Bids", "About Me", "Bid Summary"];
  return SpreadsheetApp
    .getActiveSpreadsheet()
    .getSheets()
    .filter(s => !excluded.includes(s));
}

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

Nix 29.12.2020 15:45

Другие вопросы по теме