Google Sheets App Script - получает значения из формулы вместо записи в ячейку - PullRequest
0 голосов
/ 21 января 2020

Мой скрипт устанавливает значения целого листа с помощью формулы массива.

sheet.getRange("A2").setFormula("=ArrayFormula(UNIQUE(FILTER(Furniture!$A$2:$S$15000,ISNA(MATCH(Furniture!$A$2:$A$15000,Shopify!$F$2:$F$50000,0)))))");

Можно ли получить эти значения в виде массива, не обновляя лист? На данный момент лучшее, что я могу придумать, это получить значения из таблицы после применения приведенной выше формулы. Должен быть более эффективный способ.

1 Ответ

0 голосов
/ 21 января 2020

Вы хотите получить значения из листа «Мебель», которые не включены в значения из листа «Shopify», а затем удалить повторяющиеся значения из результата. Вы можете получить значения для каждого диапазона листов, используя функцию getRange() [1] в сочетании с функцией getLastRow() [2], чтобы получить диапазон до последней строки с данными (Вы можете изменить это и просто использовать весь свой A1 обозначения для каждого листа). Вы можете использовать функцию JS filter [3], чтобы отфильтровать значения из Мебель, которых нет в Shopify, и, наконец, функцию reduce [4], чтобы избавиться от повторяющихся значений. Ниже приведен рабочий код, вам нужно заменить Spreadsheet ID и запустить функцию getUniqueValues из редактора, в результате чего вы получите логический массив.

function getUniqueValues() {
  var ss = SpreadsheetApp.openById('[SPREADSHEET-ID]');
  var furnitureSheet = ss.getSheetByName('Furniture');
  var shopifySheet = ss.getSheetByName('Shopify');

  //Get the range for each sheet based on last row with data
  var furnitureArray = furnitureSheet.getRange('A2:A' + furnitureSheet.getLastRow()).getValues().join().split(",");
  var shopifyArray = shopifySheet.getRange('F2:F' + shopifySheet.getLastRow()).getValues().join().split(",");

  var resultArray = furnitureArray.filter(function(furnitureValue) {        
    if(shopifyArray.indexOf(furnitureValue) == -1) {
      return true;
    }
    return false
  });

  resultArray = resultArray.reduce(function(a,b){
    if (a.indexOf(b) < 0 ) a.push(b);
    return a;
  },[]);

  Logger.log(resultArray);
}

[1] https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangea1notation

[2] https://developers.google.com/apps-script/reference/spreadsheet/sheet#getlastrow

[3] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

[4] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

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