如何将特定列导出到 Google 表格中的文本文件
How to export specific columns to text files in Google Sheets
我想知道如何将特定列中的文本从 Google 表格导出到 Google Drive .txt 文件。我正在尝试从所有列中导出所有文本,因此 google 驱动器上的每一列都会有一个不同的 .txt 文件。还想跳过前两行。
我发现了这个:
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(", "));
});
}
此函数正在为所有行而不是列创建一个文本文件,并且还在生成的 txt 文件中添加了很多“,”。我不知道如何改变它会做列,基本上我想要为列创建一个 txt 文件的函数(例如:D3 到 D100、E3 到 E100、F3 到 E100 等等)。
还希望在对 sheet.
进行任何更改时更新文本文件
谢谢:)
转置数组:
getValues() returns 一个二维数组,其中外部数组中的每个元素对应一行。您想要一个二维数组,其中外部数组元素对应于列。即需要对二维数组进行转置
可以在 this answer:
中找到一个简单的方法
array[0].map((_, colIndex) => array.map(row => row[colIndex]));
其他问题:
- 如果您想跳过前两行,您范围内的起始行(在 getRange 中定义)应该是
3
而不是 1
,并更正行数相应的行(检查下面的代码示例)。
- 它增加了很多
,
因为你是这样写的(见 row.join(", ")
)。相反,如果您希望每个值占据一个新行,请改用 \n
(检查下面的代码示例)。
- 更新文本文件需要安装 onEdit trigger which would fire the function
saveToTextfile
every time the spreadsheet is edited. Since this function requires authorization, it cannot be a simple trigger, but an installable one。如果您在安装时遇到问题,请 post 提出一个新问题(每个问题应该针对一个特定问题,而不是多个问题)。
代码示例:
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
});
}
参考:
- Transposing a 2D-array in JavaScript
我想知道如何将特定列中的文本从 Google 表格导出到 Google Drive .txt 文件。我正在尝试从所有列中导出所有文本,因此 google 驱动器上的每一列都会有一个不同的 .txt 文件。还想跳过前两行。 我发现了这个:
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(", "));
});
}
此函数正在为所有行而不是列创建一个文本文件,并且还在生成的 txt 文件中添加了很多“,”。我不知道如何改变它会做列,基本上我想要为列创建一个 txt 文件的函数(例如:D3 到 D100、E3 到 E100、F3 到 E100 等等)。 还希望在对 sheet.
进行任何更改时更新文本文件谢谢:)
转置数组:
getValues() returns 一个二维数组,其中外部数组中的每个元素对应一行。您想要一个二维数组,其中外部数组元素对应于列。即需要对二维数组进行转置
可以在 this answer:
中找到一个简单的方法array[0].map((_, colIndex) => array.map(row => row[colIndex]));
其他问题:
- 如果您想跳过前两行,您范围内的起始行(在 getRange 中定义)应该是
3
而不是1
,并更正行数相应的行(检查下面的代码示例)。 - 它增加了很多
,
因为你是这样写的(见row.join(", ")
)。相反,如果您希望每个值占据一个新行,请改用\n
(检查下面的代码示例)。 - 更新文本文件需要安装 onEdit trigger which would fire the function
saveToTextfile
every time the spreadsheet is edited. Since this function requires authorization, it cannot be a simple trigger, but an installable one。如果您在安装时遇到问题,请 post 提出一个新问题(每个问题应该针对一个特定问题,而不是多个问题)。
代码示例:
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
});
}
参考:
- Transposing a 2D-array in JavaScript