Объединение данных столбцов в строки с помощью скрипта приложения или Node JS - PullRequest
0 голосов
/ 20 февраля 2020

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

Вы можете видеть на скриншоте «Пример столбца», где я сейчас нахожусь, и в «Сложенном примере», где я хочу быть. Я могу сделать это в Google Sheets с помощью App Script - загрузить данные в виде столбцов, затем преобразовать их в стопку и перейти в BigQuery - или - использовать Google Cloud Storage для загрузки столбцовых данных, а затем использовать Node для преобразования в стопку при переходе в BigQuery.

В любом случае, это нужно добавить в BigQuery в качестве составного примера.

Есть идеи, как это сделать?

Columnar Example

Stacked Example

1 Ответ

1 голос
/ 20 февраля 2020

Приведенная ниже функция выполняет следующие действия:

  • Получите все данные с листа, на котором находятся ваши исходные данные (называемые Source, пожалуйста, измените соответственно) с помощью getDataRange .
  • Удалите заголовки из полученного массива и добавьте их на лист назначения (называемый Target) с shift , slice и appendRow .
  • Итерация по остальным строкам с помощью forEach и для каждой строки итерация по каждой последующей группе из четырех столбцов с для l oop, добавление (1) первого для столбцов каждой строки и (2) каждой последующей группы из четырех столбцов в новой строке на целевом листе.
function myFunction() {
  var ss = SpreadsheetApp.getActive();
  var sourceSheet = ss.getSheetByName('Source'); // Change accordingly
  var targetSheet = ss.getSheetByName('Target'); // Change accordingly
  targetSheet.clearContents(); // Removes all old content from target sheet before appending new data (remove this if you don't want that)
  var sourceValues = sourceSheet.getDataRange().getValues();
  var numCols = 4; // Number of desired columns in destination spreadsheet
  var headers = sourceValues.shift().slice(0, numCols * 2);
  targetSheet.appendRow(headers); // Remove if the destination sheet already has headers
  sourceValues.forEach(function(row) { // Iterate through each row in source sheet
    for (var i = numCols; i < row.length; i += numCols) { // Iterate through each group of four columns (excluding first four) in each row
      var part1 = row.slice(0, numCols); // First four columns
      var part2 = row.slice(i, i + numCols); // Each successive group of four
      var targetRow = part1.concat(part2); // Concatenate the four first columns with each group of four
      targetSheet.appendRow(targetRow); // Append row (8 columns)
    }
  });  
}
...