使用脚本从Google云端硬盘表单导出电子表格或CSV文本文件?

时间:2014-03-12 17:00:11

标签: google-apps-script google-sheets

我们有一个Google表单,可以将其提交内容保存到Google电子表格中。

使用脚本管理器,我们如何将电子表格内容或最新表单提交消息导出到我的硬盘上的本地Excel电子表格或制表符分隔的文本文件中?

这将是一个两步过程:

  1. 抓取表单提交或电子表格更改事件,并将数据外部化到云端硬盘。
  2. 将数据放在我的本地硬盘上。
  3. 我们如何使用Google电子表格脚本执行#1和/或#2?

    我们在电子表格上创建了​​一个OnFormSubmit回调函数,但我们只能将事件消息(表单提交的数据)记录到Drive中的弹出窗口。

    function OnFormSubmit(e) {
    
      var sheet = SpreadsheetApp.getActiveSheet();
      var row =  SpreadsheetApp.getActiveSheet().getLastRow();
    
      var newMessage = e;
    
      Logger.log(newMessage);
    }
    

    有一个CreateFile方法,但我不知道如何使用它。

1 个答案:

答案 0 :(得分:2)

我能够使用下面的代码在我的Google云端硬盘上创建制表符分隔的文本文件,该文件是原始Google电子表格的副本,用于从表单中收集数据。

代码是在Google电子表格更改事件中触发的。这允许代码在提交新表单时运行,但它也将更新电子表格中任何更改事件的文本文件。这允许您编辑现有条目。

文件在您的驱动器上后,一个简单的计划批处理文件可以将文件复制到Google云端硬盘以外的任何位置。

function saveAsTabDelimitedTextFile() {
  // get Spreadsheet Name
  var fileName = SpreadsheetApp.getActiveSheet().getSheetName();

  // Add the ".txt" extension to the file name
  fileName = fileName + ".txt";

  // Convert the range data to tab-delimited format
  var txtFile = convertRangeToTxtFile_(fileName);

  // Delete existing file
  deleteDocByName(fileName);

  // Create a file in the Docs List with the given name and the data
  DocsList.createFile(fileName, txtFile);
}


function convertRangeToTxtFile_(txtFileName) {
  try {
    var txtFile = undefined;
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheets()[0];
    var rows = sheet.getDataRange();
    var data = rows.getValues();

    // Loop through the data in the range and build a string with the data
    if (data.length > 1) {
      var txt = "";
      for (var row = 0; row < data.length; row++) {
        // Join each row's columns and add a carriage return to end of each row
        txt += data[row].join("\t") + "\r\n";
      }
      txtFile = txt;
    }
    return txtFile;
  }
  catch(err) {
    Logger.log(err);
    Browser.msgBox(err);
  }
}