将Google表格转换为文本文档的脚本

时间:2018-03-06 22:28:10

标签: google-apps-script google-sheets google-drive-api

我正在尝试在Google表格中创建一个自定义脚本,用于在Google云端硬盘中创建文本文件。

工作表名称将是文件夹名称,列A中的值将是文本文件名称,列B中的值将是插入文本文件的文本。

我已经成功创建了它,但是我在扩展它时遇到问题,为每一行创建一个新文件并执行多个工作表。

如何在添加新工作表或新行时调整代码以创建其他文件夹和文件?

这是我到目前为止所做的:

function export() { 
  var sheet = SpreadsheetApp.getActiveSheet(); 
  var filename = sheet.getRange(1, 1).getValue();
  var foldername = sheet.getSheetName();
  Logger.log('Filename = ' + filename + '  Foldername = ' + foldername);
  var pFIT = DriveApp.getRootFolder().getFoldersByName(foldername);
  var parentFolder, File ;
  if (pFIT.hasNext())
    parentFolder= pFIT.next();

  if (parentFolder==null) {
    parentFolder = DriveApp.getRootFolder().createFolder(foldername);
  }

  var existing = parentFolder.getFilesByName(filename);
  if (existing.hasNext()) {
    var file = existing.next();
    if (file.getName() === filename) {
      file.setTrashed(true);
    }
  }
  var values = sheet.getRange(1, 2).getValues(); 
  var text = values.map(function (a) {return a.join('\t');}).join('\r\n');
  parentFolder.createFile(filename, text, MimeType.PLAIN_TEXT);
}

以下是我在运行脚本时要完成的任务:

屏幕截图1

屏幕截图2

屏幕截图3

1 个答案:

答案 0 :(得分:0)

这次修改怎么样?作为基本方向,我通过检查文件夹和文件的重复来修改您的脚本。

修改要点:

  • 检索工作表名称并检查文件夹的重复。
    • 找不到工作表名称的文件夹时,该文件夹将创建为新文件夹。
  • 检索" A2的文件名:A"并检查文件的重复。
    • 如果找不到文件名文件,则使用B列数据创建文件。

修改后的脚本:

function export() { 
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheets = ss.getSheets();
  for (var i in sheets) {
    var name = sheets[i].getSheetName();
    var fo = DriveApp.getFoldersByName(name);
    var folder = fo.hasNext() ? fo.next() : DriveApp.getRootFolder().createFolder(name);
    var values = sheets[i].getDataRange().getValues();
    values.shift();
    var filename, text;
    for (var j in values) {
      [filename, text] = values[j];
      folder.getFilesByName(filename).hasNext() || folder.createFile(filename, text, MimeType.PLAIN_TEXT);
    }
  }
}

注意:

  • 此工作表在工作表添加到电子表格时创建文件夹。
  • 如果将值添加到列A,此脚本将创建文件。
    • 在这种情况下,当您更新A列的值时,将创建具有更新值的新文件。另一方面,忽略现有文件。

如果这不是您想要做的,请告诉我。我想修改。