Exportieren (oder drucken) Sie mit einem Google-Skript eine neue Version von Google-Tabellen in eine PDF-Datei, indem Sie die PDF-Optionen verwenden

Ich versuche, ein Google-Skript zum Exportieren (oder Drucken) einer neuen Version von Google Spreadsheet (oder Sheet) in PDF mit Seitenparametern (Hochformat / Querformat, ...) zu erstellen.

Ich habe darüber recherchiert und eine mögliche Lösung gefundenHier. Es gibt mehrere ähnliche Lösungen wie diese, die jedoch nur mit der alten Version von Google Spreadsheet funktionieren.

Bitte beachten Sie diesen Code:

function exportAsPDF() {
  //This code runs from a NEW version of spreadsheet 

  var oauthConfig = UrlFetchApp.addOAuthService("google");
  oauthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
  oauthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope=https://spreadsheets.google.com/feeds/");
  oauthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
  oauthConfig.setConsumerKey("anonymous");  oauthConfig.setConsumerSecret("anonymous");
  var requestData = { "method": "GET", "oAuthServiceName": "google","oAuthUseToken": "always" };

  var ssID1="0AhKhywpH-YlQdDhXZFNCRFROZ3NqWkhBWHhYTVhtQnc"; //ID of an Old version of spreadsheet
  var ssID2="10xZX9Yz95AUAPu92BkBTtO0fhVk9dz5LxUmJQsJ7yPM"; //ID of a NEW version of spreadsheet 

  var ss1 = SpreadsheetApp.openById(ssID1);  //Old version ss object
  var ss2 = SpreadsheetApp.openById(ssID2);  //New version ss object
  var sID1=ss1.getActiveSheet().getSheetId().toString();  // old version sheet id
  var sID2=ss2.getActiveSheet().getSheetId().toString();  // new version sheet id

  //For Old version, this runs ok.
  var url1 = "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key="+ssID1+"&gid="+sID1+"&portrait=true"+"&exportFormat=pdf";
  var result1 = UrlFetchApp.fetch(url1 , requestData);
  var contents1=result1.getBlob();
  var pdfFile1=DriveApp.createFile(contents1).setName("FILE1.pdf");

  //////////////////////////////////////////////
  var url2 = "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key="+ssID2+"&gid="+sID2+"&portrait=true"+"&exportFormat=pdf";
  var result2 = UrlFetchApp.fetch(url2 , requestData);
  var contents2=result2.getBlob();
  var pdfFile2=DriveApp.createFile(contents2).setName("FILE2.pdf");
}

Es funktioniert einwandfrei und erzeugt die Datei „FILE1.pdf“, die korrekt geöffnet werden kann. Bei der neuen Version der Tabelle tritt jedoch der Fehler 302 auf (Verkürzte Serverantwort) beim "var result2 = UrlFetchApp.fetch (url2, requestData);”. Nun, es ist in Ordnung, da das URL-Format für die neue Version nicht das Argument "key" enthält. Eine korrekte URL für neue Versionen muss wie folgt lauten"https://docs.google.com/spreadsheets/d/"+ssID2+"/export?gid="+sID2+"&portrait=true&format=pdf"

Verwenden Sie dies für url2 (var url2 = "https://docs.google.com/spreadsheets/d/"+ssID2+"/export?gid="+sID2+"&portrait=true&format=pdf") es scheitert wieder mit fehler “Die Autorisierung für den Dienst "google" kann nicht durchgeführt werden”. Nun, dieser Fehler könnte auf einen inkorrekten Gültigkeitsbereich des zurückzuführen seinRequestTokenUrl. Ich habe den alternativen Anwendungsbereich gefundenhttps://docs.google.com/feeds und setze es:oauthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope=https://docs.google.com/feed/"); Nachdem der Code erneut ausgeführt wurde, tritt in der Zeile mit ein neuer Fehler aufUrlFetchApp.fetch(url2 , requestData);: “Fehler OAuth"... Ich weiß nicht, wie ich weitermachen soll ... Ich habe Hunderte von Varianten ohne gute Ergebnisse getestet.

Irgendwelche Ideen? Richtig ist der Umfangdocs.google.com/feeds für eine neue Version von Tabellenkalkulationen? ist das richtigoauthConfig?

Danke im Voraus.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage