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
}
Получить имена всех листов, кроме некоторых с определенными именами. другой код работает
Я добавил код напрямую. Извините за это, форматирование не было принято с первого раза. Я также не знаю тонны кода. Я собрал это из функций сценария Google для выполнения небольшой задачи, которую я хочу. Я ценю любую помощь, которую вы можете предоставить!





Возвращает массив имен листов, не найденных в массиве исключений.
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.
Спасибо, но когда я вставил его и сохранил, все имена листов все еще выводились. Ваш процесс имеет гораздо больше смысла, чем то, что я делал.
Убедитесь, что ваш массив exclude имеет точные имена листов, без лишних пробелов и в идеальном регистре.
Это работает, когда я тестировал его на новом листе. Но на нужном мне листе это не работает. Все названия листов правильные. У меня также есть функция ниже, работающая в другом скрипте. Это повлияет на это?
Для чего вы используете функцию исключения листов? Не могли бы вы показать остальную часть вашего кода?
Другой код автоматически меняет имя листа, если обновляется определенная ячейка.
Я использую исключение, потому что у меня есть вкладки, названные в честь определенных групп. Я хочу видеть только массив этих групп, а не другие вкладки.
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 (имя нового листа);} } }
Извините, я не мог отформатировать и вставить его, потому что я продолжал получать сообщение об ошибке, в котором говорилось, что весь мой вопрос не был кодом
Хорошо, так зачем вообще нужна эта функция? Вы не используете его, чтобы вернуть что-нибудь? Если вы пытаетесь исключить эти листы из своего скрипта onEdit, вам нужно включить код в этот скрипт или вызвать функцию где-нибудь...
Итак, чтобы уточнить, потому что я не уверен, что все ясно... Я использую оба сценария для двух разных целей. Они сохраняются как два отдельных кода. Мне нужен onEdit, потому что после того, как я вручную дублирую лист, я хотел бы, чтобы он был переименован после значения в ячейке на этом листе. Эта ячейка имеет раскрывающееся меню проверки данных списка. Я щелкаю значение из списка, и имя листа меняется. Но вы правы, строка моих «исключенных предметов» не служит цели. Я не мог понять, как исключить эти листы, поэтому я сделал обходной путь, чтобы убедиться, что моя эталонная ячейка на этих листах
остается пустым. Я мог бы удалить эту часть честно. Я просто согласился, потому что вывод сценария был достаточно хорош для меня. Спасибо, что были так терпеливы со мной.
Мой сценарий SheetNames должен использоваться на вкладке «Сводка ставок», потому что я хочу, чтобы в пустом столбце отображались только определенные листы. Затем я собираюсь использовать функцию ЗАПРОС, чтобы сопоставить значения со столбцами на остальной части листа.
Итак, вы хотите, чтобы sheetNames возвращал список имен ваших листов, разделенных запятыми?
Нет, я действительно хочу, чтобы он возвращал массив, чтобы каждое имя листа имело свою ячейку в столбце. Таким образом, код, который вы мне дали, теоретически работает. Но я не уверен, почему мне возвращаются все имена листов, когда я применяю их к своему файлу.
Функция, которую я предоставил, делает именно это, я только что проверил ее сам.
Да, только что обновил свой комментарий выше, сказав это. Я поиграю с этим, чтобы увидеть, смогу ли я сузить проблему. Спасибо за помощь!
Поделитесь своим листом, если это возможно, и я посмотрю для вас.
В конце имен моих листов были лишние пробелы, которые я не мог видеть. Теперь это работает! Большое спасибо и много благословений вам!
Да, как правило, для таких вопросов! Рад, что смог помочь.
@А.Э. не забудьте отметить ответ как правильный, если предоставленное решение достаточно ответило на ваш вопрос. Это не является обязательным, но может помочь пользователям найти решение в будущем.
Вот более сжатая версия с использованием функций es6+. Это не обязательно «лучше», но мне всегда легче делать ошибки, работая с императивными циклами.
Вот более сжатая версия с использованием функций 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));
}
Извините, что наткнулся на старую тему. Это не сработало для меня, вы можете помочь?
Пожалуйста, скопируйте и вставьте свой код вместо изображения