首页 > 解决方案 > 将行另存为文本文件,从单元格中获取文件名

问题描述

这个 google 脚本成功地为每一行创建了一个文本文件,但它以行号命名每个文件,例如“row0.txt”、“row1.txt”。我想在其相关行中为 ColA 中的单元格命名每个文本文件。row1.txt 将保存为 White Ribbon - 1999.txt row2.txt 将保存为 Contagion - 2011.txt

我意识到诀窍在最后两行,但我对如何获得正确的单元格内容(A1、A2、A3 等)作为每行的文件名感到困惑。

这是我的电子表格

这是我正在使用的脚本(注意我保存到 *md 而不是 *txt)

function saveRowsToTextfile() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getActiveSheet();
  var range = sheet.getRange("B2:W4");
  var rows = range.getValues();
  var folder = DriveApp.getFoldersByName("Test").next();
  var files = folder.getFiles();
  while(files.hasNext()) files.next().setTrashed(true);
  rows.forEach(function(row, index) {
    folder.createFile("row" + index + ".md", row.join("\n"));
  });
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


在您的范围中包含列 Ashift()并在加入数组之前使用以删除每个子数组的第一个元素,即标题。

您的代码应如下所示:

function saveRowsToTextfile() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getActiveSheet();
  var range = sheet.getRange("A2:W4");
  var rows = range.getValues();
  var folder = DriveApp.getFoldersByName("Test").next();
  var files = folder.getFiles();
  while(files.hasNext()) files.next().setTrashed(true);
  rows.forEach(function(row) {
    var title = row[0]; //set first element of array as title
    row.shift(); //remove first element of the array 
    var content = row.join("\n");
    folder.createFile(title + ".md", content);
  }); 
}

输出:

在此处输入图像描述

参考


推荐阅读