1

Ich habe viele Blätter in einer Tabelle. Ich habe 2 Blätter, die ich jedes Mal exportieren möchte. Blatt Eins ist ein Blatt mit den Informationen. Blatt 2 ist das Blatt, das ich den Kunden geben muss, und es nimmt Referenzen aus Blatt Eins.Einzelblatt zu PDF in Apps Script exportieren

Momentan erstelle ich eine neue temporäre Tabelle, kopiere Sheet One in die neue Tabelle und kopiere dann Sheet Two in die temporäre Tabelle. Danach konvertiere ich die temporäre Tabelle in eine PDF. Dann lösche ich die temporäre Tabelle und speichere die PDF in einem Ordner in Google Drive.

Das erstellte PDF enthält 2 Seiten beider Blätter. Ich brauche nur Blatt zwei. Wenn ich nur Blatt zwei übertrage, bleibt das Blatt mit vielen #REF Fehlern zurück, da Blatt Eins nicht da ist. Gibt es eine Möglichkeit, nur Blatt 2 zu exportieren, ohne die #REF-Fehler zu haben?

Hier ist mein Code unten:

//create a temporary spreadsheet, copy both files onto it 
var newSpreadsheet = SpreadsheetApp.create(nameOfSheet); 
var d = ss.getSheetByName('Data').copyTo(newSpreadsheet); //the sheet  with all the information 
d.setName('Data'); 

sheetToCopy.copyTo(newSpreadsheet); //the sheet that uses references from the data sheet 
newSpreadsheet.deleteSheet(newSpreadsheet.getSheetByName("Sheet1")); //delete the original sheet of the new spreadsheet 
var blobOfNewSpreadsheet = newSpreadsheet.getBlob(); //create pdf 
folder.createFile(blobOfNewSpreadsheet); //add to folder 


//delete the temporary spreadsheet2 
var deleteSpreadsheet = DriveApp.getFileById(newSpreadsheet.getId()); 
deleteSpreadsheet.setTrashed(true); 

Antwort

1

Versteckte Blätter sind nicht enthalten, wenn eine Tabelle über getBlob exportiert wird. So können Sie unerwünschte Blätter vor dem Export vorübergehend ausblenden.

function export() {  
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName('Unwanted Sheet'); 
    sheet.hideSheet(); 
    DriveApp.createFile(ss.getBlob()); 
    sheet.showSheet(); 
} 

Das Obige verbirgt nur ein Blatt, was im Zusammenhang mit Ihrer Frage ausreicht. Hier ist eine Version, die alles außer einem verbirgt.

function export(sheetName) {  
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheets = ss.getSheets; 
    for (var i = 0; i < sheets.length; i++) { 
    if (sheets[i].getSheetName() != sheetName) { 
     sheet[i].hideSheet(); 
    } 
    } 
    DriveApp.createFile(ss.getBlob()); 
    for (var i = 0; i < sheets.length; i++) { 
    sheet[i].showSheet(); 
    } 
} 
+0

Tolle Lösung! Der eine, an den ich dachte, war das Kopieren der Anzeigewerte des gewünschten Blattes anstelle der Referenzen für jede Zelle. Diese Lösung ist viel schneller. –