Как можно улучшить скрипт, который должен ежедневно в 23:59 проходить по столбцу, находить значение, равное текущей дате, и заменять формулу на соответствующее значение? <br/> <br/> Вот код, который я использовал: <br/> <br/> <pre><code class="javascript">function myFunction() { let ss = SpreadsheetApp.getActiveSpreadsheet(); let Sheet = ss.getSheetByName("Загрузка"); let Sheet1 = ss.getSheetByName("Воронка"); let findingRange = Sheet.getRange("N:N").getValues(); let valToFind = Sheet1.getRange("B3").getValue(); // ссылка на ячейку с формулой СЕГОДНЯ() let row; for(let i = 0; i < findingRange.length; i++){ if(findingRange[i].indexOf(valToFind) !== -1){ row = i + 1; } }console.log(row); // выводит "Информация undefined" Sheet.getRange(row).setValues(Sheet.getRange(row).getValues()); // заменяет формулу в ячейке на ее значение }</code></pre>
Для выполнения проверки данных в массиве и применения определенного действия к соответствующим элементам, вы можете использовать метод map(). Например, если вы хотите изменить все элементы массива, удовлетворяющие определенному условию, вы можете сделать это следующим образом: ```javascript let array = [1, 2, 3, 4, 5]; let newArray = array.map(item => { if (item % 2 === 0) { return item * 2; } else { return item; } }); console.log(newArray); // [1, 4, 3, 8, 5] - элементы, удовлетворяющие условию (четные числа) умножены на 2 ``` Чтобы улучшить скрипт, который должен ежедневно в 23:59 проходить по столбцу, находить значение, равное текущей дате, и заменять формулу на соответствующее значение, вам следует исправить несколько ошибок в вашем коде: ```javascript function myFunction() { let ss = SpreadsheetApp.getActiveSpreadsheet(); let Sheet = ss.getSheetByName("Загрузка"); let Sheet1 = ss.getSheetByName("Воронка"); let findingRange = Sheet.getRange("N:N").getValues(); let valToFind = Sheet1.getRange("B3").getValue(); // ссылка на ячейку с формулой СЕГОДНЯ() let row; for(let i = 0; i < findingRange.length; i++){ if(findingRange[i][0].toISOString() === valToFind.toISOString()){ row = i + 1; break; // Выход из цикла после нахождения первого совпадения } } if(row) { Sheet.getRange(row, 1).setValue(valToFind); // Заменяет формулу в найденной ячейке на ее значение } } ``` В этом улучшенном скрипте вы исправили ошибку сравнения значений в массиве (findingRange) и ячейке (valToFind), добавили проверку на наличие совпадения и исправили ошибку при использовании метода setValues(). Теперь скрипт должен правильно находить и заменять значение даты в столбце в соответствии с вашими требованиями.
Такой м.б. вариант?
function replaceFormula() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName("Загрузка"); const currentDate = Utilities.formatDate(new Date(), "GMT+3", "dd.MM.yyyy"); // текущая дата const range = sheet.getRange(1,1,sheet.getLastRow(),1).getValues(); // тут сейчас диапазон A:A. Диапазон N:N getRange(1,14,sheet.getLastRow(),1) for(let i = 0; i < range.length; i++) { let today = Utilities.formatDate(new Date(range[i]), "GMT+3", "dd.MM.yyyy") == currentDate; if(today){ sheet.getRange(i+1,1).setValue(currentDate); // для диапазона N:N sheet.getRange(i+1,14) } }; }