derray87
Goto Top

Google Sheets Script: PDF Drucken und in GDrive-Ordner Speichern

Hallo,

ich benötigte bitte Hilfe bei dem folgenden Teil meines Google Sheets-Scriptes.

const Datum = new Date();

const AktuellerMonat = Datum.toLocaleDateString('de-DE', { month: 'long'});  

let GDriveOrdner = DriveApp.getFileById('10OJI2k-ylxM25vv2Fj7qQs-SZaMPSJHV7uiYrWiAIMQ');  

let blob = GDriveOrdner.getAs('application/pdf');  
let pdf = DriveApp.getFolderById('1ZqxKpW1CeZbf4lzoP49hdXgIOneIbsi7')  

  .createFile(blob)
  .setName(sheetName);

Dieser Teil erstellt eine PDF-Datei und speichert diese unter einem bestimmten Namen (definiert unter der Variable "sheetName") in einem bestimmten GDrive-Ordner.
So weit funktioniert auch alles wunderbar.

Gerne würde ich jetzt aber noch folgende Änderungen in das Script aufnehmen, komme aber leider bei meiner Recherche nicht so recht weiter:

- Nur die aktuelle Seite Drucken und nicht das ganze Dokument;
- Formatierung:
- Keine Gitternetzlinien drucken;
- Ggf. nur die Spalten A - E drucken;

Vielen Dank im Voraus.


Grüße
Ray

Content-ID: 81633035342

Url: https://administrator.de/forum/google-sheets-script-pdf-drucken-und-in-gdrive-ordner-speichern-81633035342.html

Ausgedruckt am: 24.12.2024 um 18:12 Uhr

8030021182
8030021182 20.11.2023 aktualisiert um 20:03:39 Uhr
Goto Top
Guckst du hier da findest du eine Funktion die das alles macht, über Parameter alles anpassbar
https://developers.google.com/apps-script/samples/automations/generate-p ...

/**
 * Creates a PDF for the customer given sheet.
 * @param {string} ssId - Id of the Google Spreadsheet
 * @param {object} sheet - Sheet to be converted as PDF
 * @param {string} pdfName - File name of the PDF being created
 * @return {file object} PDF file as a blob
 */
function createPDF(ssId, sheet, pdfName) {
  const fr = 0, fc = 0, lc = 5;
  let lr = sheet.getLastRow();
  const url = "https://docs.google.com/spreadsheets/d/" + ssId + "/export" +  
    "?format=pdf&" +  
    "size=7&" +  
    "fzr=true&" +  
    "portrait=true&" +  
    "fitw=true&" +  
    "gridlines=false&" +  
    "printtitle=false&" +  
    "top_margin=0.5&" +  
    "bottom_margin=0.25&" +  
    "left_margin=0.5&" +  
    "right_margin=0.5&" +  
    "sheetnames=false&" +  
    "pagenum=UNDEFINED&" +  
    "attachment=true&" +  
    "gid=" + sheet.getSheetId() + '&' +  
    "r1=" + fr + "&c1=" + fc + "&r2=" + lr + "&c2=" + lc;  

  const params = { method: "GET", headers: { "authorization": "Bearer " + ScriptApp.getOAuthToken() } };  
  const blob = UrlFetchApp.fetch(url, params).getBlob().setName(pdfName + '.pdf');  

  // Gets the folder in Drive where the PDFs are stored.
  const folder = getFolderByName_(OUTPUT_FOLDER_NAME);

  const pdfFile = folder.createFile(blob);
  return pdfFile;
}
Gruß Katrin
colinardo
Lösung colinardo 21.11.2023 aktualisiert um 11:42:39 Uhr
Goto Top
Servus Ray,
die oben gepostete Funktion noch um ein paar Parameter erweitert, dann wird sie etwas komfortabler nutzbar:
function ExportCurrentSheetAsPDF() {
  // get workbook
  let wb = SpreadsheetApp.getActiveSpreadsheet();
  // get current sheet
  let ws = wb.getActiveSheet();
  // create pdf from current sheets Range "A1:E<lastRow>" 
  let pdfFile = createPDF(wb,ws,"Rechnung.pdf","DerZielOrdnerDesPDFs",0,0,ws.getLastRow(),5);  
}

// create pdf function
function createPDF(workbook, sheet, pdfName, outputFolder, fRow, fColumn, lRow, lColumn) {
  // define export uri
  const url = "https://docs.google.com/spreadsheets/d/" + workbook.getId() + "/export" +    
    "?format=pdf&" +    
    "size=a4&" +    
    "fzr=true&" +    
    "portrait=true&" +    
    "fitw=true&" +    
    "gridlines=false&" +    
    "printtitle=false&" +    
    "top_margin=0.5&" +    
    "bottom_margin=0.25&" +    
    "left_margin=0.5&" +    
    "right_margin=0.5&" +    
    "sheetnames=false&" +    
    "pagenum=UNDEFINED&" +    
    "attachment=true&" +    
    "gid=" + sheet.getSheetId() + '&' +  
    "r1=" + fRow + "&c1=" + fColumn + "&r2=" + lRow + "&c2=" + lColumn;  

  // get oauth token
  const params = { method: "GET", headers: { "authorization": "Bearer " + ScriptApp.getOAuthToken() } };    
  // execute action and create pdf bytes
  const blob = UrlFetchApp.fetch(url, params).getBlob().setName(pdfName);  

  // Gets the folder in Google Drive where the PDF will be stored.
  const foundFolders = DriveApp.getFoldersByName(outputFolder);
  // if folder was not found, throw exception
  if (!foundFolders.hasNext()){
    throw("Could not find the folder named '" + outputFolder +"'!");  
  }
  // get first found folder
  const folder = foundFolders.next();
  // return file
  return folder.createFile(blob);
}

back-to-topTest


back-to-topAusgangstabelle:


screenshot

back-to-topErgebnis wie gewünscht mit Ausgabe von A:E:


screenshot


Grüße Uwe