0

もう一度簡単なスクリプトを作成して、毎日のメニューカートを保存します。つまり、ファイル(PDF)を静的リンクと共有できるということです。 PDFのベースはGoogleのスプレッドシートです。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の作成ですが、私はAコースの持っているよりメニューの新しい静的共有リンク。

私は現在のファイルを更新するには、「のgetBlob」機能を備えたものを使用しなければならないと思います。

誰もがアイデアを持っているならば、非常に良いことでしょう。 多くの感謝。

+0

とワーキング解決策を見つけることができました。それがうまくいくかどうかはわかりません。 http://blogger-hints-and-tips.blogspot.de/2013/08/replace-google-drive-file-with-new-version.html –

答えて

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); 
} 
} 
関連する問題