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); 

} 

あなたがアクティブなGoogleスプレッドシートの実際のファイルIDで上記URLにSSIDを交換し、ブラウザにURLをコピーして貼り付ける場合は、アクティブなスプレッドシートが「自動」にダウンロードされます。それはまさに私が上記のスクリプトに追加する必要があるものです。

私の質問は、ファイルを代わりにデフォルトのダウンロードフォルダのローカルマシンにダウンロードするように、上記の機能を変更および/または拡張する方法です。

+0

注:お客様の質問にリンクされている回答は、クライアント側のJavaScriptです。ご質問はGoogle Apps Scriptに関するものです。 – Mogsdad

+0

私を正しい方向に向けるThx。私はあなたが来る時に述べた質問の答えを試してみるでしょう。 – juseit

+1

@Mogsdad注:自分の質問に重複しているとマークしました。実際、あなたが指している質問に対する答えは、上のスクリプトと同じことをしています:拡張子.xlsxの新しいファイルをGoogleドライブに作成する。それはOKですが、私が必要とするのは、このファイルをローカルマシン上のフォルダに自動的にダウンロードさせることです。実際には、上記のように、ssIDをURLのDrive内の既存のファイルの実際のファイルIDに置き換えて、ブラウザにURLをコピーして貼り付けると、正しいファイルがダウンロードされます。それが私の必要なものです。あなたもその部分で私を助けてくれることを願っています。 – juseit

答えて

3

あなたの質問に投稿したコードは、お気づきのように、GoogleスプレッドシートのXLSバージョンをGoogleドライブにエクスポートします。 GoogleドライブをPCに同期している場合は、パソコンにもコピーが保存されますが、それはあなたの後ろではありません。システムダイアログを使用するGoogleシートのHTTPダウンロードをトリガーして、PC上でダウンロードしたファイルを保存する場所を選択できるようにする方法が必要です。

これを達成するには、サーバー側でGoogle Appsスクリプトテクニックを使用することはできません。サーバーではコンピュータのリソースにアクセスできないためです。代わりに、我々はブラウザを活用する必要があります。 「アクティブなスプレッドシート」からこれを行うことに興味があるので、ダウンロードリンクを含むダイアログを提供するために、カスタムメニュー項目でGoogleスプレッドシートのUIを拡張することは理にかなっています。

screenshot

驚くべきことに、ほとんどのコードは、これをサポートするために必要です。この作業は、<a>anchor)タグを含む1行の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

ほぼあります。まず質問を更新しました。それはテキストにありましたが、タイトルにはありませんでした。ソリューションには依然としてユーザーの操作が必要です。そこでタイトルに自動的にイベントを追加しました。 Googleが自動的に保存するため、イベントonSaveは存在しません(見つかりませんでした)。 onOpenは今はOKです。私はまたデフォルトのdownloadfolderに保存したくありません。ダイアログは必要ありませんが、アンソースな場所への修正パスがあれば、デフォルトの場所はOKです。あなたが探しているものが(onOpenイベントによって自動的に)可能であると思いますか?いいえ、答えもありません。 – juseit

+0

いいえ、クライアントPC上のファイルを自動的に更新するリモートサーバーを取得することはできません。 (巨大なセキュリティ上の懸念) – Mogsdad

+0

クリア。私はそれがそれのようなものになると思った。私の質問にお答えいただきありがとうございます。私はこの質問に答えてマークします。 – juseit

関連する問題