Задать вопрос
@sbraven

Как проверить данные в массиве и применить действие к нужным строкам?

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

По гайдам написал такой код, но почему-то не работает, заранее благодарю

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()); //заменяю формулу в ячейке на ее значение
}
  • Вопрос задан
  • 251 просмотр
Подписаться 2 Простой Комментировать
Решения вопроса 1
@Lesnichiyy
Такой м.б. вариант?

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)
    }
  };  
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ProgrammerForever
@ProgrammerForever Куратор тега Google Apps Script
Учитель, автоэлектрик, программист, музыкант
Примерно так:
let range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName().getDataRange();
let values = range.getValues();

const formatDate = (date) => Utilities.formatDate(date, "GMT+3", "dd.MM.yyyy");
let now = formatDate(new Date());

let newValues = values.map(row=>{
  let [date, ...rest] = row;
  let formattedDate = formatDate(date);
  return now===formattedDate?[now, ...rest]:row;
});

range.setValues(newValues);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы