Объединение данных из нескольких листов с идентификатором из каждого [Google Apps Script] - PullRequest
0 голосов
/ 02 апреля 2020

Я использую скрипты Google Apps для копирования диапазона данных из одной электронной таблицы в другую. Цель состоит в том, чтобы объединить результаты из нескольких листов отчетов GA в один объединенный лист. Сценарий, который я включил ниже, выполняет часть этой цели, но мне также нужно включить идентификатор, чтобы я знал, из какого отчета GA каждая строка поступает.

Пример ниже (на самом деле столбцов данных больше, но для простоты):

GA отчет 1, сайт = ab c

data
1
2
3

GA отчет 2, сайт = xyz

data
4
5
6

В настоящее время я могу сделать это:

Объединенные данные

data
1
2
3
4
5
6

Что мне нужно, это:

site    data
abc     1
abc     2
abc     3
xyz     4
xyz     5
xyz     6

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

Текущий код:

function appendRows() {
//get data from GA report in range
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetData = ss.getSheets()[1];
  var lastColumn = sheetData.getLastColumn();
  var lastRow = sheetData.getLastRow();
  var rangeR1C1 = "R16C1:R"+lastRow+"C"+lastColumn;
  var range = sheetData.getRange(rangeR1C1);
  var values = range.getValues();

//copy range to combined sheet
  var ssCombined = SpreadsheetApp.openById('xxxxx');
  var combinedSheet = ssCombined.getSheets()[0];
  lastRow = combinedSheet.getLastRow() + 1;
  combinedSheet.getRange(lastRow,1,values.length,values[0].length).setValues(values);
}

Редактировать: другой пример

dataset1     dataset2
1            3
2            4

Объединенные данные

dataset1      1
dataset1      2
dataset2      3
dataset2      4

и др c.

1 Ответ

0 голосов
/ 03 апреля 2020
  • Вы хотите достичь следующей ситуации с помощью Google Apps Script.

    • От:

      dataset1     dataset2
      1            3
      2            4
      
    • Кому:

      dataset1      1
      dataset1      2
      dataset2      3
      dataset2      4
      

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

Точки модификации:

  • Сначала все значения извлекаются из листа. И извлеченные данные делятся для каждого столбца. В это время добавляется значение заголовка. Затем значения каждого столбца объединяются в массив.

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

С:
var lastColumn = sheetData.getLastColumn();
var lastRow = sheetData.getLastRow();
var rangeR1C1 = "R16C1:R"+lastRow+"C"+lastColumn;
var range = sheetData.getRange(rangeR1C1);
var values = range.getValues();
Кому:
const data = sheetData.getDataRange().getValues();
const [ha, hb] = data.shift();
const v = data.reduce((o, [a, b]) => {
  o.a.push([ha, a]);
  o.b.push([hb, b]);
  return o;
}, {a: [], b: []});
const values = [...v.a, ...v.b];

Примечание:

  • Пожалуйста, включите V8 в редакторе сценариев.
  • Если вы хотите достичь первого примера ситуации, пожалуйста, измените сценарий выше. В этом случае, пожалуйста, получите значения из каждого листа.

Ссылки:

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