如何将特定的列导出到Google表格中的文本文件 转置数组:其他问题:代码示例:参考:

问题描述

我试图弄清楚如何将文本从Google表格的特定列导出到Google Drive .txt文件。我正在尝试从所有列导出所有文本,因此Google驱动器上的每个列都会有一个不同的.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,依此类推)。 还希望在工作表上进行任何更改时更新文本文件

谢谢:)

解决方法

转置数组:

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

一种简单的方法可以在this answer中找到:

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

其他问题:

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

代码示例:

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

参考: