Выберите и скопируйте некоторые значения из электронной таблицы, сравнив их с другим столбцом на другом листе.

Я прочитал эти две ссылки Google Script: условное копирование строк из одной электронной таблицы в другую и https://stackoverflow.com/a/4809413/1526044, и после попытки я не могу делать то, что мне нужно.

У меня есть одна таблица с некоторыми данными на одном листе и другой лист с ключевой информацией о столбцах для сравнения:

KEY Value1 Value2 Value3 
AAA   B      C      D
BBB   Y      Z      W

Мне нужна функция, которая проверяет мою электронную таблицу DATA строка за строкой, ища значения в значениях столбцов на ключевом листе. И когда любое из значений найдено, он записывает в первый столбец электронной таблицы DATA (в той же строке) значение KEY.

Пример: таблица ДАННЫХ

empty text text text B
empty text text text text
empty text   C  text text
empty text text text Y

Итак, после сценария ДАННЫЕ будут выглядеть так:

AAA text text text B
empty text text text text
AAA text   C  text text
BBB text text text Y

Мы будем благодарны за любые другие предложения по этому поводу.


person darkpollo    schedule 15.07.2012    source источник
comment
Можете ли вы опубликовать код, который вы пробовали?   -  person Srik    schedule 15.07.2012
comment
не уверен, что это вообще поможет. :(   -  person darkpollo    schedule 16.04.2013
comment
Имеет ли это ответь на твой вопрос?   -  person Mishal    schedule 12.05.2020


Ответы (1)


Я изменил аналогичный сценарий, на который недавно ответил, что он должен делать то, что вам нужно. Я не тестировал, но вы можете попробовать. Есть несколько комментариев, поясняющих эту идею ... вероятно, потребуется некоторая отладка.

РЕДАКТИРОВАТЬ: Я поигрался с этим и немного отладил ;-), так что, похоже, теперь он работает по мере необходимости - вот ссылка на мой тестовый лист

function xxx(){ 
/* we have an array 'keysheet'
    and an array datasheet , you get these with something like*/
        var keysheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0].getDataRange().getValues();
    // and
        var datasheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1].getDataRange().getValues();// if other columns, change index values in the arrays : 0=A, 1=B ...
    // the iteration could be like this :
              for(i=0;i<datasheet.length;++i){ // don't miss any data
                for(j=0;j<keysheet.length;++j){ // iterate through keysheet to find the keys
                  for(k=1;k<keysheet[0].length;++k){ // iterate in keysheet row to check every column except first one
                      var key = keysheet[j][k]
                      Logger.log(k+' '+key+"  "+datasheet[i].toString().match(key))
                 if(datasheet[i].toString().match(key) == key){// check whole rows to find if key is in data
                  var x = datasheet[i].shift();
                   datasheet[i].unshift(keysheet[j][0]) // if match found, replace first element in datasheet with fisrt element in keysheet
                     break  // if found break k loop maybe you should also break j loop ?
                       }
                 }
                   } //loop keysheet
             } // loop datasheet

            /* now you have a modified datasheet array that can directly overwrite the old datasheet 
            using setValues() */
            var sh = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];// assuming the datasheet sheet is sheet nr2
            Logger.log(datasheet)
           sh.getRange(1,1,datasheet.length,datasheet[0].length).setValues(datasheet);
              }
        //
person Serge insas    schedule 15.07.2012
comment
Спасибо, попробую. Извините за задержку с ответом - person darkpollo; 16.04.2013