如何用 Google Sheets 列标题命名导出的文本文件?
数据阿明
结论
先读取第 1 行的列标题,再用标题数组中对应的索引生成文件名。脚本仍从第 3 行读取数据,因此只需单独读取标题行,数据导出的起始行不变。
修改后的脚本
function saveToTextfile() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var firstRow = 3; // 从第 3 行开始导出数据
var lastColumn = sheet.getLastColumn();
var lastRow = sheet.getLastRow();
// 第 1 行是列标题
var headers = sheet.getRange(1, 1, 1, lastColumn).getValues()[0];
// 数据从第 3 行开始,跳过前两行
var range = sheet.getRange(
firstRow,
1,
lastRow - firstRow + 1,
lastColumn
);
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) {
var header = String(headers[index] || "").trim();
var fileName = (header || "Column" + index) + ".txt";
folder.createFile(fileName, column.join("\n"));
});
}
headers 和 columns 都按列顺序排列,因此 headers[index] 就是当前导出列的标题。标题有值时,文件名会使用该标题,例如 姓名.txt;标题为空时,则使用 Column0.txt 这样的名称。数据仍通过 column.join("\n") 用换行符连接。
注意事项
原脚本中的 while (files.hasNext()) files.next().setTrashed(true); 会把目标文件夹里的所有文件移到回收站,每次运行都会执行。请确认文件夹中只有可清理的文件,或按需调整这段清理逻辑。如果多个列标题相同,生成的文件也会同名;需要区分时,可在文件名中附加列序号。
备注:内容仅供参考。
