2017-04-20 15 views
0

Google Appsスクリプトを使用して、GoogleシートをExcelファイルとしてGoogleドライブにエクスポートします。 Excelファイルは、Googleドライブデスクトップアプリを使用して、他の6人のユーザーとローカルマシンに同期します。 Googleシートをエクスポートするたびに、古いファイルを同じファイル名で置き換えるのではなく、新しいファイルを作成して元のバージョンを削除します。これは、Googleドライブデスクトップと同期すると、Windowsは元のバージョンを削除してごみ箱に送信する以外は問題ありません。Googleドライブに保存されたExcelファイル(Googleスプレッドからエクスポートされたもの)の内容をアプリスクリプトで保存することができます

ファイルは15分ごとに作成され、3MBのサイズになるため、数週間後にごみ箱は1ギガバイトのデータでいっぱいになります。

新しいファイルを作成するのではなく、ファイルの内容を更新することはできますか?

は、ここで私は、現時点で使用するものです:

 var blob = exportAsExcel(spreadsheetId) 
     var file = DriveApp.createFile(blob).setName(excelFileName); 
     fileId = file.getId(); 
     file.makeCopy(destinationFolder); 
     Drive.Files.remove(fileId); 
    } 


    function exportAsExcel(spreadsheetId) { 
    var file = Drive.Files.get(spreadsheetId); 
     var url = file.exportLinks['application/vnd.openxmlformatsofficedocument.spreadsheetml.sheet']; 
     var token = ScriptApp.getOAuthToken(); 
     var response = UrlFetchApp.fetch(url, { 
     headers: { 
      'Authorization': 'Bearer ' + token 
     } 
     }); 
     return response.getBlob(); 
} 

答えて

2

あなたがドライブのAPIを使用してファイルを上書きすることができます。詳細情報はhttps://developers.google.com/drive/v3/reference/files/updateです。

スプレッドシートを既存のExcelファイルに上書きする方法を用意しました。このメソッドは、メソッドexportAsExcel()を使用します。まず、Google APIコンソールとGoogleの高度なサービスでドライブAPIが有効になっているかどうかを確認してください。

src_sheetIdおよびdst_fileIdは、それぞれ上書きしたいスプレッドシートIDと既存のExcelファイルです。 overWrite()を実行すると、既存のExcelファイルが上書きされます。したがって、Excelファイルのファイル名とファイルIDは変更されません。

スクリプト:ところで

function overWrite(src_sheetId, dst_fileId) { 
    UrlFetchApp.fetch(
    "https://www.googleapis.com/upload/drive/v3/files/" + dst_fileId + "?uploadType=multipart", 
    { 
     method: "PATCH", 
     headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()}, 
     contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 
     payload: exportAsExcel(src_sheetId).getBytes() 
    } 
); 
} 

は、スクリプトの作業罰金のexportAsExcel()ていますか?私が使用すると、エラーが発生します。私は以下の変更によりエラーを取り除いた。

var url = file.exportLinks['application/vnd.openxmlformatsofficedocument.spreadsheetml.sheet']; 

へ:

var url = file.exportLinks['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']; 

私はあなたの質問を誤解している場合、私はごめんなさい。

+0

@Tanaikeの答えに追加して。 [アドバンストドライブサービス](https://developers.google.com/apps-script/advanced/drive)を使用すると、AppsスクリプトでGoogleドライブのWeb APIを使用できます。これは関連するSO [post](http://stackoverflow.com/a/24226885/5995040)にも記載されています。お役に立てれば。 –

+0

@ Mr.Rebot追加情報をありがとうございます。 – Tanaike

+0

返信の遅れに対するお詫び私は仕事を離れました。本当に素敵!!これは治療法です。私はhttpリクエストのPATCHメソッドについて知らなかった。すべての時間を学ぶ!いい物。 – MrPea

関連する問題