#google-apps-script #google-sheets
#google-apps-script #google-sheets
Вопрос:
У меня есть файл Google sheets, который содержит 1 вкладку в день, и название каждой вкладки — adate в формате d MMMM yyyy. Теперь я создал скрипт, который просматривает файл и скрывает любые вкладки, название которых старше, чем сегодня-14, что прекрасно работает, НО: по какой-то причине он не ищет точное совпадение, а содержит совпадение. так, например, если он ищет 1 декабря, он скроет также 11 декабря, поскольку в нем также содержится 1 декабря.
Вопрос; Как бы вы посоветовали мне настроить скрипт для поиска и скрытия только точного соответствия?
// Get list of sheet names in an array format
function sheetnames() {
// Define array
var out = new Array()
// Get sheets
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
// get current month
var testDate = new Date();
var date = new Date();
date.setDate(testDate.getDate()-14);
var secondDate = Utilities.formatDate(date, Session.getScriptTimeZone(), "d MMMM").toLowerCase();
Logger.log(secondDate);
// Work through each sheet one at a time
for (var i=0 ; i<sheets.length ; i ) {
// define the current sheet
var curSheetName = sheets[i].getName();
// determine if matches criteria
if (curSheetName.indexOf(secondDate) !== -1) {
sheets[i].hideSheet();
}
}
}
Ответ №1:
Метод String.prototype.indexOf(searchValue) проверяет, является ли searchValue подстрокой указанной строки
- Другими словами, он проверяет, содержит ли строка susbtring
- Это поведение отличается от Array.prototype.indexOf()
- В вашем случае, если вы ищете точное совпадение, измените
if (curSheetName.indexOf(secondDate) !== -1)
Для
if (curSheetName == secondDate)
Комментарии:
1. это прекрасно работает. просто пришлось внести небольшую корректировку, чтобы добавить год в переменную secondDate, чтобы теперь точно соответствовать названию вкладки. var secondDate = Utilities.formatDate(дата, сессия.getScriptTimeZone(), «д ММММ гггг»). toLowerCase();