1

我想弄清楚如何将文本从 Google 表格的特定列导出到 Google Drive .txt 文件。我正在尝试从所有列中导出所有文本,因此每列的谷歌驱动器上都会有一个不同的 .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(", "));
  });
}

此函数为所有行而不是列创建一个文本文件,并且还在生成的 txt 文件中添加了很多“,”。我不知道如何更改,所以它会做列,基本上我希望函数为列创建一个 txt 文件(例如:D3 到 D100,E3 到 E100,F3 到 E100 等等)。还希望在工作表上进行任何更改时更新文本文件。

谢谢 :)

4

1 回答 1

0

转置数组:

getValues()返回一个二维数组,其中外部数组中的每个元素对应于一行。您想要一个二维数组,其中外部数组元素对应于列。也就是说,您需要转置二维数组。

可以在此答案中找到一种简单的方法:

array[0].map((_, colIndex) => array.map(row => row[colIndex]));

其他问题:

  • 如果您想跳过前两行,则范围中的起始行(在getRange中定义)应该3代替1,并相应地更正行数(检查下面的代码示例)。
  • 它增加了很多,,因为您是这样编写的(请参阅 参考资料row.join(", "))。如果您希望每个值占用一个新行,\n请改用(检查下面的代码示例)。
  • 更新文本文件需要您安装一个onEditsaveToTextfile触发器,该触发器会在每次编辑电子表格时触发该函数。由于这个功能需要授权,所以它不能是一个简单的触发器,而是一个可安装的触发器。如果您在安装时遇到问题,请发布一个新问题(每个问题都应该针对一个特定问题,而不是其中几个问题)。

代码示例:

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
  });
}

参考:

于 2020-09-16T08:11:08.473 回答