Поиск и сопоставление - PullRequest
       2

Поиск и сопоставление

0 голосов
/ 14 сентября 2018

Импорт листа

 id  | Price | c,e
s123 |  99   |  A@
s124 |  98   |  B@
s125 |  97   |  C@
r78  |  35   |  D@

Это код:

function buscarCe2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName("Import")
  var lr = s.getLastRow()
  var lookup = s.getRange(2, 1, lr - 1, 3).getValues();
  var s1 = ss.getSheetByName("Pricelist") 
  var lr1 = s1.getLastRow()
  var range = s1.getRange(2, 1, lr1 - 1, 3).getValues();
  var lookupRange = [];
  for (var i = 0; i < lookup.length; i++) {
    for (var j = 0; j < range.length; j++) {
      if (lookup[i][0] == range[j][0]) {
      }
    }  
  }
  s1.getRange(2, 3, lookupRange.length).setValues(lookupRange);
}

АКТУАЛЬНЫЙ РЕЗУЛЬТАТ:
Я попытался lookupRange.push() внутри блока if:
Прайс лист

id   |  Price |  c,e
a453 |  99    |   A@
a111 |  98    |   D@
s123 |  97    |
r78  |  35    |

С помощью скрипта я не получаю соответствия между s123 A @ и r78 D @. Я не уверен, что делать дальше.

желаемый выход:

прайс лист

id   |  Price |  c,e
a453 |   99   |
a111 |   98   |
s123 |   97   |  A@
r78  |   35   |  D@

1 Ответ

0 голосов
/ 16 сентября 2018

Для создания пустого 2D-массива lookupRange, вы можете попробовать:

От:

var lookupRange = [];

Кому:

var lookupRange = Array.apply(null,Array(range.length)).map(function(e){ return [""];});

или

var lookupRange = s1.getRange(2, 3, range.length).getValues(); //Assuming they're empty.
  • Array(range.length) создает разреженный массив длины, равный длине range
  • Array.apply() распространяет разреженный массив и преобразует его в плотный массив, который затем может быть сопоставлен с массивами с пустыми строками [""]
  • В качестве альтернативы, простой способ - просто получить значения из таблицы с пустыми значениями

Модифицированный скрипт:

function buscarCe2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName("Import")
  var lr = s.getLastRow()
  var lookup = s.getRange(2, 1, lr - 1, 3).getValues();
  var s1 = ss.getSheetByName("Pricelist") 
  var lr1 = s1.getLastRow()
  var range = s1.getRange(2, 1, lr1 - 1, 3).getValues();
  var lookupRange = Array.apply(null,Array(range.length)).map(function(e){ return [""];});
  for (var i = 0; i < lookup.length; i++) {
      for (var j = 0; j < range.length; j++) {
        if (lookup[i][0] == range[j][0]) {
          lookupRange[j][0]=lookup[i][2];
        }    
      }  
    }
  s1.getRange(2, 3, lookupRange.length).setValues(lookupRange);
}

Дополнительная литература:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...