2016-09-25 110 views
1

我正在使用Google電子表格準備發票,並且正在尋找一個簡單腳本,該表單將發票所在的工作表保存在「發票」文件夾來構建檔案。 我從Stackoverflow和youtube上的衆多貢獻者那裏「借來了」代碼,並提出了一個可行的代碼。我必須將發票複製到新創建的電子表格中,因爲從類型電子表格中的單張工作表創建PDF似乎是不可能的。我還必須使用一段代碼將pdf從根目錄移至「發票」文件夾 我無法解決的唯一問題是第6行創建的電子表格由兩張紙片組成。一個空的和正確複製的。創建的pdf因此alsa有2張,一張空白和一張正確的紙張。 任何人都有線索如何解決這個問題? 順便說一下,有時需要幾分鐘才能在文件夾中顯示pdf。使用Google Apps腳本將電子表格中的單個表格保存爲特定文件夾中的pdf

下面是代碼

function generatePdf(){ 
    //Create a temporary spreadsheet, to store the desired sheet from the spreadsheet in. 
    var originalSpreadsheet = SpreadsheetApp.getActive(); 
    originalSpreadsheet.setActiveSheet(originalSpreadsheet.getSheets()[4]); 
    var name = "Testname" 
    var newSpreadsheet = SpreadsheetApp.create(name); 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    sheet = originalSpreadsheet.getActiveSheet(); 
    sheet.copyTo(newSpreadsheet); 
    //Save the desired sheet as pdf 
    var pdf = DriveApp.getFileById(newSpreadsheet.getId()).getAs('application/pdf'); 
    var saveCopy = DriveApp.createFile(pdf); 
    //Delete temporary spreadsheet 
    DriveApp.getFilesByName(name).next().setTrashed(true); 
    //Move the pdf file from the rootfolder to the folder where invoices are to be stored. 
    var files = DriveApp.getRootFolder().getFiles(); 
    while (files.hasNext()) { 
     var file = files.next(); 
     var destination = DriveApp.getFolderById("0B3ok04PZOVbgLXA2dy14MVlLRXM"); 
     destination.addFile(file); 
     var pull = DriveApp.getRootFolder(); 
     pull.removeFile(file);  
    } 
} 
+0

謝謝,這個代碼幾乎爲我工作。它在正確的文件夾中創建文件,但沒有pdf後綴。該文件之前有一個pdf徽標,但沒有後綴我無法打開它。我做了一些修改: – John

+0

對不起,很快就敲了回車鍵,我在下面添加了完整的評論。 – John

回答

3

我不知道,如果你也遇到了這個代碼,但你可以試試這個:

function checkSheet() { 
var sheetName = "Sheet1"; 
var folderID = "FOLDER_ID"; // Folder id to save in a folder. 
var pdfName = "Invoice "+Date(); 

var sourceSpreadsheet = SpreadsheetApp.getActive(); 
var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName); 
var folder = DriveApp.getFolderById(folderID); 

//Copy whole spreadsheet 
var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy("tmp_convert_to_pdf", folder)) 

//delete redundant sheets 
var sheets = destSpreadsheet.getSheets(); 
for (i = 0; i < sheets.length; i++) { 
if (sheets[i].getSheetName() != sheetName){ 
destSpreadsheet.deleteSheet(sheets[i]); 
} 
} 

var destSheet = destSpreadsheet.getSheets()[0]; 
//repace cell values with text (to avoid broken references) 
var sourceRange = sourceSheet.getRange(1,1,sourceSheet.getMaxRows(),sourceSheet.getMaxColumns()); 
var sourcevalues = sourceRange.getValues(); 
var destRange = destSheet.getRange(1, 1, destSheet.getMaxRows(), destSheet.getMaxColumns()); 
destRange.setValues(sourcevalues); 

//save to pdf 
var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName); 
var newFile = folder.createFile(theBlob); 

//Delete the temporary sheet 
DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true); 
} 

: 在測試該代碼,它立即創建pdf,但可能取決於發票模板。

參考文獻:

希望這有助於!

UPDATE

enter image description here enter image description here

+0

感謝它幾乎爲我工作。創建了「pdfish」文件,顯示了pdf徽標,但文件名沒有pdf後綴,無法打開。我更改了兩行:從行刪除.setName等:var theBlob = destSpreadsheet.getBlob()。getAs('application/pdf')。setName(pdfName);並通過pdfName取代了行var var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId())。makeCopy(「tmp_convert_to_pdf」,文件夾)中的「tmp_convert_to_pdf」。現在它工作正常。感謝您的幫助。 – John

+0

檢查我的答案更新 –

+0

感謝您的幫助,它使我解決了我的問題,它的工作原理應該如此。 – John

相關問題