ошибка обновления двух активных листов в листах Google на основе сравнения ячеек - PullRequest
1 голос
/ 02 ноября 2019

Я пытаюсь заставить этот код работать, но я знаю, что что-то упустил. код должен сделать следующее: найти определенный текст из другой ячейки, используя ссылку на другой лист, поэтому на листе Google есть два листа: «BSR DATA» и «ENTRY FORM». из формы ввода, ячейка g6 будет сравнивать свои данные с первым столбцом ДАННЫХ BSR и, если она соответствует критериям, обновит конкретную строку ссылки на массив / ячейку с «новым значением».

ссылка налисты google: https://docs.google.com/spreadsheets/d/1kBuczydffPFBEfy2oegC1WsKXMjSxbGNRzWLCKurOMs/edit?usp=drivesdk

function UpdateBSRSpecial()
{
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var testForm = ss.getSheetByName("ENTRY FORM");
    var testTable = ss.getSheetByName("BSR DATA");
    var testFormValue = testForm.getRange("G6").getValue();
    var rangeData = testTable.getDataRange();
    var lastColumn = rangeData.getLastColumn();
    var lastRow = rangeData.getLastRow();
  for(var i=0;i>lastRow;i++){
     var dataID = testForm.getRange(i,1).getValue();
     if(testFormValue == dataID)
    {
        testTable.getRange(i,6).setValue("new value");
    };
  };
};

1 Ответ

0 голосов
/ 08 ноября 2019

Существующий скрипт обновляет все строки, потому что он зацикливается на for(var i=0;i>lastRow;i++){. Следующий скрипт демонстрирует процесс поиска отдельного термина.

Я не собираюсь заниматься обновлением «нового значения», поскольку это не ясно из вопроса.

Аспекты к сведению

  • скрипт получает все данные о BSR - var bsrdata = bsr.getRange(1,1,bsrLR,bstLC).getValues();. Это можно использовать позже при обновлении значений.
  • с использованием метода Javascript map , столбец A извлекается как отдельный массив для поиска - var bsrColA = bsrdata.map(function(e){return e[0];});//[[e],[e],[e]]=>[e,e,e]
  • поискапроводится с использованием метода Javascript indexOf . Примечание: если совпадение найдено, метод возвращает порядковый номер поискового термина в массиве;если совпадений не найдено, метод возвращает «-1».
  • скрипт проверяет, был ли поиск успешным: if (result !=-1){
  • indexOf возвращает индекс, начинающийся с нуля, поэтому фактическим номером строки является индекс плюс один: var row = result+1;

function so5866895401() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var formsheetname = "ENTRY FORM";
  var form = ss.getSheetByName(formsheetname);
  var bsrname = "BSR DATA";
  var bsr = ss.getSheetByName(bsrname);

  // get input cell on form
  var searchterm = form.getRange("G6").getValue();
  // Logger.log(searchterm);// DEBUG

  //get data from BSR
  var bsrLR = bsr.getLastRow();
  var bstLC = bsr.getLastColumn();
  var bsrdata = bsr.getRange(1,1,bsrLR,bstLC).getValues();

  // get column A of BSR
  var bsrColA = bsrdata.map(function(e){return e[0];});//[[e],[e],[e]]=>[e,e,e]
  // Logger.log(bsrColA);// DEBUG

  // search for the searchterm in ColumnA of BSR
  var result = bsrColA.indexOf(searchterm); // zero-based
  if (result !=-1){
    var row = result+1;
    Logger.log("result = "+result+", row = "+row);
  }
}
...