Как экспортировать определенные столбцы в текстовые файлы в Google Таблицах

Я пытаюсь понять, как я могу экспортировать текст из определенного столбца из Google Таблиц в файл Google Диска.txt. Я пытаюсь экспортировать весь текст из всех столбцов, чтобы для каждого столбца на диске Google был отдельный файл.txt. Также хотелось бы пропустить первые 2 строки. Я нашел это:

function saveToTextfile() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getActiveSheet();
  var range = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn());
  var rows = range.getValues();
  var folder = DriveApp.getFoldersByName("folderName").next();
  var files = folder.getFiles();
  while(files.hasNext()) files.next().setTrashed(true);
  rows.forEach(function(row, index) {
    folder.createFile("row" + index + ".txt", row.join(", "));
  });
}

Эта функция создает текстовый файл для всех строк вместо столбцов, а также добавляет много "," в полученный текстовый файл. Я не могу понять, как изменить, чтобы он выполнял столбцы, в основном я хочу, чтобы функция создавала текстовый файл для столбцов (например: от D3 до D100, от E3 до E100, от F3 до E100 и так далее). Также хочу, чтобы это обновляло текстовые файлы при внесении любых изменений в лист.

Благодаря:)

1 ответ

Решение

Транспонирование массива:

getValues ​​() возвращает 2D-массив, в котором каждый элемент внешнего массива соответствует строке. Вы хотите иметь 2D-массив, в котором элементы внешнего массива соответствуют столбцам. То есть вам нужно транспонировать 2D-массив.

Простой способ сделать это можно найти в этом ответе:

       array[0].map((_, colIndex) => array.map(row => row[colIndex]));

Другие вопросы:

  • Если вы хотите пропустить первые две строки, начальная строка в вашем диапазоне (определенном в getRange) должна быть 3 вместо 1и соответствующим образом исправьте количество строк (см. пример кода ниже).
  • Это добавляет много , потому что вы так написали (см. row.join(", ")). Если вместо этого вы хотите, чтобы каждое значение занимало новую строку, используйте \n вместо этого (проверьте образец кода ниже).
  • Для обновления текстовых файлов вам потребуется установить триггер onEdit, который запускает функцию saveToTextfileкаждый раз при редактировании электронной таблицы. Поскольку эта функция требует авторизации, она может быть не простым триггером, а устанавливаемым. Если у вас возникли проблемы с его установкой, задайте новый вопрос (каждый вопрос должен касаться конкретной проблемы, а не нескольких из них).

Пример кода:

       function saveToTextfile() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getActiveSheet();
  var firstRow = 3; // Skip first two rows => start at 3rd
  var range = sheet.getRange(firstRow, 1, sheet.getLastRow() - firstRow + 1, sheet.getLastColumn());
  var rows = range.getValues();
  var columns = rows[0].map((_, colIndex) => rows.map(row => row[colIndex]));
  var folder = DriveApp.getFoldersByName("folderName").next();
  var files = folder.getFiles();
  while(files.hasNext()) files.next().setTrashed(true);
  columns.forEach(function(column, index) {
    folder.createFile("column" + index + ".txt", column.join("\n")); // New line
  });
}

Справка:

Другие вопросы по тегам