Как можно улучшить скрипт, который должен ежедневно в 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(). Теперь скрипт должен правильно находить и заменять значение даты в столбце в соответствии с вашими требованиями.
Такой м.б. вариант? <br/> <br/> <pre><code>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)
}
};
}</code></pre>