Использовать = УНИКАЛЬНО из другой таблицы в WorkBook - Google Apps Script - PullRequest
1 голос
/ 28 января 2020

Я пытаюсь использовать функцию (= UNIQUE?), Чтобы вернуть список имен в диапазоне и сколько имен в этом диапазоне - на другом листе. Я понимаю, что эта функция будет делать это - если данные находятся в том же рабочем листе.

Вот ссылка на пример электронной таблицы, чтобы вы могли понять, что я имею в виду https://docs.google.com/spreadsheets/d/1Fro28JD-a-ZVcWIGkzCqgNM_QEljm64FPRIVztvJTmM/edit#gid = 0

Я попробовал запрос, затем импортировал уникальный, но не очень хороший

Заранее спасибо

1 Ответ

2 голосов
/ 28 января 2020
  • Вы хотите получить частоту значений в ячейках "A2: A" на листе CURRENT PALLETS AWAITING PROCESSING в вашей общей электронной таблице.
    • Например, в случае значения Pacific Magazines - Nov 2019 Donation вы хотите поместить Pacific Magazines - Nov 2019 Donation в столбец «A» и частоту 45 в столбец «B» в другой электронной таблице.
  • Вы хотите добиться этого с помощью Google Apps Script.

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

Поток:

Последовательность действий этого примера сценария выглядит следующим образом.

  1. Получите значения из лист.
  2. Рассчитайте частоту.
    • Создать объект и преобразовать его в массив. И в этом случае массив сортируется.
  3. Положите значения.

Пример сценария:

В этом сценарии результат значения заносятся в лист destinationSheetName в таблице destinationSpreadsheetId. Перед запуском скрипта установите эти переменные.

function myFunction() {
  var destinationSpreadsheetId = "###";  // Please set the destination Spreadsheet ID.
  var destinationSheetName = "Sheet1";  // Please set the destination sheet name of the Spreadsheet.

  var destinationSS = SpreadsheetApp.openById(destinationSpreadsheetId)
  var destinationSheet = destinationSS.getSheetByName(destinationSheetName);
  var sourceSS = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet = sourceSS.getSheetByName("CURRENT PALLETS AWAITING PROCESSING");

  // Retrieve the values from the sheet.
  var values = sourceSheet.getRange(2, 1, sourceSheet.getLastRow() - 1, 1).getValues();

  // Calculate the frequency.
  var obj = values.reduce(function(o, [a]) {
    // o[a] = a in o ? o[a] + 1 : 1;
    if (a) o[a] = a in o ? o[a] + 1 : 1;  // Modified
    return o;
  }, {});
  var ar = Object.keys(obj).map(function(e) {return [e, obj[e]]});

  // Put the values.
  destinationSheet.getRange(destinationSheet.getLastRow() + 1, 1, ar.length, ar[0].length).setValues(ar);
}
  • Если вы хотите отсортировать массив результатов, поставьте ar.sort(function(a, b) {return(b[1] - a[1])}) после var ar = Object.keys(obj).map(function(e) {return [e, obj[e]]});.

Ссылки:

Если я неправильно понял ваш вопрос и это было не то направление, которое вы хотите, я прошу прощения.

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