4

請參閱下面的將活動Google電子表格轉換爲.xlsx文件的功能。該腳本將文件保存在Google雲端硬盤中。將「自動」電子表格下載爲本地計算機上的.xlsx事件

function downloadAsXlsx() { 

var spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); 
var ssID = spreadSheet.getId(); 

Logger.log(ssID); 

var url = "https://docs.google.com/spreadsheets/d/"+ssID+"/export?format=xlsx"; 
var params = {method:"GET", headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}}; 
var response = UrlFetchApp.fetch(url, params); 

// save to drive 
DriveApp.createFile(response); 

} 

如果通過主動谷歌電子表格的實際文件ID在URL代替上述的SSID,並在瀏覽器中複製並粘貼URL,活躍的電子表格下載「自動」。這正是我需要添加到上面的腳本。

我的問題是如何改變和/或擴展上述功能,以便文件被下載到本地機器的默認下載文件夾中?

+0

注意:您在您的問題中鏈接到的問題是客戶端JavaScript,而您的問題是關於Google Apps腳本。 – Mogsdad

+0

Thx指向正確的方向。我會在你未來提到的問題中嘗試答案。 – juseit

+1

@Mogsdad注:您將我的問題標記爲重複。事實上,您提到的問題的答案與上面的腳本相同:在Google雲端硬盤中創建擴展名爲.xlsx的新文件。這是好的,但另外我需要的是讓這個文件自動下載到本地機器上的文件夾。實際上,正如你可以在上面看到的那樣,如果你將URL替換爲驅動器中現有文件的實際文件ID,並將其複製並粘貼到瀏覽器中,則會下載正確的文件。那是我需要的。希望你也可以幫助我。 – juseit

回答

3

您在問題中發佈的代碼(如您已經注意到的)會將Google Spreadsheet的一個XLS版本導出到Google Drive。如果您將Google雲端硬盤同步到您的電腦上,那麼您最終還是會在電腦上看到一份副本......但這不是您要追蹤的內容。您需要一種觸發Google表單的HTTP下載的方法,該方式使用系統對話框讓您選擇PC上的哪個位置來保存下載的文件。

要完成此操作,我們不能使用服務器端Google Apps腳本技術,因爲服務器無法訪問您的計算機資源。相反,我們需要利用瀏覽器。由於您有興趣從「有效的電子表格」中完成此操作,因此使用自定義菜單項擴展Google Spreadsheet的UI以提供包含下載鏈接的對話框是合乎邏輯的。

screenshot

值得注意的是很少的代碼需要支持這一點。該工作由瀏覽器完成,基於包含<a>anchor)標記的單行HTML。

/** 
* Adds a custom menu 
* 
* @param {Object} e The event parameter for a simple onOpen trigger. 
*/ 
function onOpen(e) { 
    SpreadsheetApp.getUi() 
     .createMenu('Custom') 
     .addItem('Download as XLSX', 'downloadXLS_GUI') 
     .addToUi(); 
} 


/** 
* Display a modal dialog with a single download link. 
* 
* From: http://stackoverflow.com/a/37336778/1677912 
*/ 
function downloadXLS_GUI() { 
    // Get current spreadsheet's ID, place in download URL 
    var ssID = SpreadsheetApp.getActive().getId(); 
    var URL = 'https://docs.google.com/spreadsheets/d/'+ssID+'/export?format=xlsx'; 

    // Display a modal dialog box with download link. 
    var htmlOutput = HtmlService 
        .createHtmlOutput('<a href="'+URL+'">Click to download</a>') 
        .setSandboxMode(HtmlService.SandboxMode.IFRAME) 
        .setWidth(80) 
        .setHeight(60); 
    SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Download XLS'); 
} 
+0

幾乎在那裏。首先我更新了這個問題。它在文本中,但沒有在標題中。您的解決方案仍然需要用戶的操作。所以我自動添加了標題和事件。我相信事件onSave不存在(我無法找到它),因爲Google會自動保存。 onOpen現在可以。我也想將它保存到默認的下載文件夾中。我不需要一個對話框,而是一個修復路徑到另一個位置,然後默認位置是OK。你認爲這是可能的,我正在尋找(自動通過onOpen事件)?不,也是一個答案。 – juseit

+0

不,不可能讓任何遠程服務器自動更新客戶端PC上的文件。 (巨大的安全問題。) – Mogsdad

+0

清除。我認爲這會是這樣的。謝謝回答我的問題。我將把這個問題標記爲答案。 – juseit

相關問題