2014-03-12 145 views
0

我们有一个Google表单,将其提交保存到Google电子表格中。使用脚本从Google Drive Forms导出电子表格或CSV文本文件?

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

这将是一个2步骤的过程:

  1. 捕获形式提交或电子表格改变事件和数据外化到云驱动器。
  2. 将数据放在本地硬盘上。

我们如何使用Google电子表格脚本执行#1和/或#2操作?

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

function OnFormSubmit(e) { 

    var sheet = SpreadsheetApp.getActiveSheet(); 
    var row = SpreadsheetApp.getActiveSheet().getLastRow(); 

    var newMessage = e; 

    Logger.log(newMessage); 
} 

有一个CreateFile方法,但它不清楚我该如何使用它。

回答

2

我能够使用下面的代码在我的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); 
    } 
} 
+0

谢谢!那就是诀窍。 – jetatwork

+0

您分享的伟大工作。谢谢 – Richard

相关问题