使用Google Apps脚本将电子表格中的单个表格保存为特定文件夹中的pdf
我正在使用Google电子表格准备发票,并且正在寻找一个简单脚本,该表单将发票所在的工作表保存在“发票”文件夹来构建档案。 我从*和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);
}
}
我不知道,如果你也遇到了这个代码,但你可以试试这个:
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,但可能取决于发票模板。
参考文献:
- Simple Google Apps Script to export a single sheet to PDF and email it to a contact list
- Sample Template - Professional Invoice Template(用于测试目的)
希望这有助于!
UPDATE
感谢它几乎为我工作。创建了“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
检查我的答案更新 –
感谢您的帮助,它使我解决了我的问题,它的工作原理应该如此。 – John
谢谢,这个代码几乎为我工作。它在正确的文件夹中创建文件,但没有pdf后缀。该文件之前有一个pdf徽标,但没有后缀我无法打开它。我做了一些修改: – John
对不起,很快就敲了回车键,我在下面添加了完整的评论。 – John