Как отделить несколько столбцов от диапазона в массиве? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть ряд данных в Google Sheet, и я хочу сохранить эти данные в массиве, используя скрипт приложения.В настоящее время я могу достаточно легко ввести данные и поместить их в массив с помощью следующего кода:

  var sheetData = sheet.getSheetByName('Fruit').getRange('A1:C2').getValues()

Однако это помещает каждую строку в массив.Например, [[Apple, Red, Round], [Banana, Yellow, Long]].

Как я могу расположить массив по столбцам так, чтобы он выглядел: [[Apple, Banana], [Red,Желтый], [Круглый, длинный]].

Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Используйте API Google Sheets, который позволяет указать основное измерение ответа.Для этого сначала необходимо включить API и расширенный сервис

Для наиболее эффективного получения значений используйте конечные точки spreadsheets.values, либо get или batchGet в зависимости от ситуации.Вы можете предоставить необязательные аргументы обоим вызовам, один из которых управляет ориентацией ответа:

const wb = SpreadsheetApp.getActive();
const valService = Sheets.Spreadsheets.Values;
const asColumn2D = { majorDimension: SpreadsheetApp.Dimension.COLUMNS };
const asRow2D = { majorDimension: SpreadsheetApp.Dimension.ROWS }; // this is the default

var sheet = wb.getSheetByName("some name");
var rgPrefix = "'" + sheet.getName() + "'!";

// spreadsheetId, range string, {optional arguments}
var single = valService.get(wb.getId(), rgPrefix + "A1:C30");
var singleAsCols = valService.get(wb.getId(), rgPrefix + "A1:C30", asColumn2D);

// spreadsheetId, {other arguments}
var batchAsCols = valService.batchGet(wb.getId(), {
  ranges: [
    rgPrefix + "A1:C30",
    rgPrefix + "J8",
    ...
  ],
  majorDimension: SpreadsheetApp.Dimension.COLUMNS
});
console.log({rowResp: single, colResp: singleAsCols, batchResponse: batchAsCols});

Ответом будет либо ValueRange (с использованием get) или объект, заключающий в себе несколько ValueRange с (при использовании batchGet).Вы можете получить доступ к данным (если они были) в свойстве ValueRange values.Обратите внимание, что конечные пробелы опущены.

Дополнительную информацию можно найти в документации Sheets API и других соответствующих вопросах переполнения стека, таких как этот .

0 голосов
/ 27 декабря 2018

Похоже, вы должны транспонировать массив.Вы можете создать функцию

function transpose(data) {

return (data[0] || []).map (function (col , colIndex) {
    return data.map (function (row) {
      return row[colIndex];
      });
    });
 }

, а затем передать значения, полученные с помощью .getValues ​​(), этой функции ..

var sheetData = transpose(sheet.getSheetByName('Fruit').getRange('A1:C2').getValues())

и проверить журнал.Посмотрите, работает ли это для вас?

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