Как экспортировать определенные столбцы в текстовые файлы в 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
});
}