2016-09-25 101 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

相关问题