Циклический просмотр данных и настройка формулы IndexMatch на основе значения ячейки - слишком медленно из-за .getValue ()

1

У меня есть код, который проходит через мои строки и в зависимости от того, что это значение в столбце 2, возвращает различные типы формул IndexMatch. Мой код работает очень хорошо и помещает формулы в соответствующие столбцы, однако он очень медленный.

Я получаю сообщение о том, что.getValue() очень тяжелый и, следовательно, замедляет код.

Теперь мне нужно выяснить, как улучшить скорость кода, но поскольку я новичок в кодировании, я не особо уверен, как это сделать.

Вот что я имею:

function setFormulas() {

  var ss = SpreadsheetApp.getActiveSpreadsheet(); //gets the workbook being used
  var sheet = ss.getSheetByName("Open Requests"); //gets the active worksheet


  var sheetnametoWatch ="Open Requests"; //defines sheet 

  var columnnumbertoWatch = 14
  var valuetoWatch = ""
  var CostCenter = "'Open Requests'!"
  var lastrow = sheet.getLastRow();

  var datarange = sheet.getRange(11,2,lastrow -1,50).getValues()
  var row = 10

  for (i=0;i<datarange.length;i++){
    var rowID = 10 + i + 1

    if (datarange[i][0] == "CC"){
      var addedCell = '=CONCATENATE(F'+rowID+',N'+rowID+',K'+rowID+')';
      sheet.getRange(row + i+1,35).setFormula(addedCell);

      var MatchedCell = '=INDEX(Input!$Q:$Q,MATCH('+CostCenter+'$AI$'+rowID+',Input!$K:$K,0))';
      sheet.getRange(row + i+1,17).setFormula(MatchedCell); 

      sheet.getRange(row + i+1,18).setValue("[email protected]")
    }
    else if (datarange[i][0] == "CC + TM1"){
      var addedCell = '=CONCATENATE(F'+rowID+',N'+rowID+',K'+rowID+')';
      sheet.getRange(row + i+1,35).setFormula(addedCell);

      var MatchedCell = '=INDEX(Input!$Q:$Q,MATCH('+CostCenter+'$AI$'+rowID+',Input!$K:$K,0))';
      sheet.getRange(row + i+1,17).setFormula(MatchedCell); 

      sheet.getRange(row + i+1,18).setValue("[email protected]")
    }
    else if (datarange[i][0] == "GC"){
      sheet.getRange(row + i+1,18).setValue("[email protected]")
    }

  }

 }

Итак, как вы можете видеть, я просматриваю данные, а затем в зависимости от того, будет ли столбец = CC, CC + TM1, GC, установить другие ячейки, равные соответствующей формуле.

Было бы здорово, если бы кто-то помог мне ускорить этот процесс.

  • 1
    Прочитайте статью о лучших практиках Apps Script
Теги:
google-apps-script
google-sheets

1 ответ

0
Лучший ответ

У меня возникают проблемы с тем, что делает код, но на высоком уровне, я думаю, что вы хотите сделать это: вместо того, чтобы устанавливать формулы для определенных ячеек при циклическом переходе через цикл for, используйте цикл, чтобы выяснить какие ячейки должны быть установлены на какие формулы и хранить эту информацию. Затем, в конце цикла for, вызовите sheet.getRange(x,y).setFormula(Formula); всего несколько раз, возможно, один раз для каждой формулы.

Кажется, это может сработать?

  • 0
    Привет Дастин, спасибо, что работал очень хорошо.
  • 0
    @FabianKraus Почему бы не принять этот ответ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню