Tom B.
Tom B.

Reputation: 71

Google script save / update file

I am again creating a simple script to save a daily menu cart. Aim is, that the file (PDF) can be shared with a static link. Base for the PDF is a Google spreadsheet.

Currently I have the following code:

 // 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  
*/

My problem is the point "Create PDF + update current file. The code is saving a new file with the same name, but than I have of course a new static share link of the menu.

I think I have to use something with the "getblob" function to update the current file.

Would be very good, if anybody would have an idea. Many thanks.

Upvotes: 2

Views: 1457

Answers (1)

Tom B.
Tom B.

Reputation: 71

I was able to find a working solution with 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);  
}
}

Upvotes: 2

Related Questions