2014-03-12 81 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

相關問題