Google脚本保存/更新文件

时间:2017-09-15 12:35:51

标签: google-apps-script google-sheets google-spreadsheet-api

我再次创建一个简单的脚本来保存每日菜单。目标是,文件(PDF)可以与静态链接共享。 PDF的基础是Google电子表格。

目前我有以下代码:

 // Add new menu to sheet
function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [
    {name: "Speichern", functionName: "savepdf"},
  ];
  spreadsheet.addMenu("Als PDF speichern", entries);
};

// Add function to save sheet as PDF
function savepdf () {

    // Get spreadsheet file
    var fileid = 'FILEIDGOESHERE';
    // Create date for file name
    var ss = SpreadsheetApp.openById(fileid);
    var name = ss.getName();
    var sheet = ss.getSheetByName('Tageskarte'); 
    var range = sheet.getRange(12,1); 
    var d = range.getValue();
    var curr_date = d.getDate();
    var curr_month = d.getMonth() + 1;
    var curr_year = d.getFullYear();
    var theDate = curr_year + "-" + curr_month + "-" + curr_date + "-";
    var namearchive = "Tageskarte-"+ theDate +".pdf";
    var name = "Tageskarte-Allweglehen.pdf";

    // Choose folder where PDFs are saved
    var foldersave=DriveApp.getFolderById('FOLDERIDGOESHERE');
    var foldersavearchive=DriveApp.getFolderById('FOLDERIDGOESHERE');

    // OAuth
    var request = {
    "method": "GET",
    "headers":{"Authorization": "Bearer "+ScriptApp.getOAuthToken()},    
    "muteHttpExceptions": true
    };

    // Create PDF + update current file
    var fetch='https://docs.google.com/spreadsheets/d/'+fileid+'/export?format=pdf&size=A4&portrait=true&gridlines=false'
    var pdf = UrlFetchApp.fetch(fetch, request);
    pdf = pdf.getBlob().getAs('application/pdf').setName(name);
    var file = foldersave.createFile(pdf);




    // Create PDF for archive and save
    var pdfarchive = UrlFetchApp.fetch(fetch, request);
    pdfarchive = pdfarchive.getBlob().setName(namearchive);
    var file = foldersavearchive.createFile(pdfarchive);
}

/*
fmcmd=12
size=legal/A4
fzr=true/false
portrait=false/true
fitw=true/false
gid=0/1/2  
gridlines=false/true
printtitle=false/true
sheetnames=false/true
pagenum=UNDEFINED
attachment=false/true  
*/

我的问题是关键点"创建PDF +更新当前文件。代码正在保存一个具有相同名称的新文件,但我当然还有菜单的新静态共享链接。

我想我必须使用" getblob"用于更新当前文件的功能。

如果有人有想法的话会很好。 非常感谢。

1 个答案:

答案 0 :(得分:0)

我能够通过Drive.Files.update找到一个可行的解决方案

    // Create PDF + update current file
var fetch='https://docs.google.com/spreadsheets/d/'+fileid+'/export?format=pdf&size=A4&portrait=true&gridlines=false'
var pdf = UrlFetchApp.fetch(fetch, request);
pdf = pdf.getBlob().getAs('application/pdf').setName(name);

var deleteexisting = foldersave.getFilesByName(name);
if (deleteexisting.hasNext() === false) {
// if no file is found then create it
foldersave.createFile(pdf);
} else {
while (deleteexisting.hasNext()) {
    var updatedPDF = deleteexisting.next();
    Drive.Files.update({mimeType: 'application/pdf'}, updatedPDF.getId(), pdf);  
}
}