PAYATHON 2026

如何用 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); 会把目标文件夹里的所有文件移到回收站,每次运行都会执行。请确认文件夹中只有可清理的文件,或按需调整这段清理逻辑。如果多个列标题相同,生成的文件也会同名;需要区分时,可在文件名中附加列序号。

备注:内容仅供参考。