我有一个代码,当从链接表单提交时,它将选择包含最新提交信息的行,该行将自动以我喜欢的格式填充另一张纸,然后将其另存为PDF。我已经将此代码用于多个工作表,但是现在我需要在包含图像的工作表上使用它。我的PDF在保存时没有图像,这对于该过程至关重要。除此之外,如果有人可以提供帮助,我也希望将其保存在景观中,
我已经尝试了一些代码,但是在编写代码方面有所帮助,并且对语言的理解不足以完成这项工作。
function generatePdf() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheeta = ss.getSheetByName('Firstsheet');
sheeta.getRange("A2:A").clear();
var lastrow = sheeta.getLastRow();
var range = sheeta.getRange(lastrow, 1);
var values = range.setValue("autofill"); //This is a checkbox in column A which triggers the vlookup on the second sheet
var originalSpreadsheet = SpreadsheetApp.getActive();
var sourcesheet = originalSpreadsheet.getSheetByName("Secondsheet");
var sourcerange = sourcesheet.getRange('A:I');
var sourcevalues = sourcerange.getValues();
var data = sourcesheet.getDataRange().getValues();
var pdfname = sourcesheet.getRange('E34').getDisplayValue();
var newSpreadsheet = SpreadsheetApp.create("Spreadsheet to export");
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var projectname = SpreadsheetApp.getActiveSpreadsheet();
var sheet = sourcesheet.copyTo(newSpreadsheet);
var destrange = sheet.getRange('A:I');
destrange.setValues(sourcevalues);
newSpreadsheet.getSheetByName('Sheet1').activate();
newSpreadsheet.deleteActiveSheet();
var pdf = DriveApp.getFileById(newSpreadsheet.getId());
var theBlob = pdf.getBlob().getAs('application/pdf').setName("Sheet" + pdfname);
var folderID = "folder ID goes here";
var folder = DriveApp.getFolderById(folderID);
var newFile = folder.createFile(theBlob);
DriveApp.getFileById(newSpreadsheet.getId()).setTrashed(true);
sheeta.getRange("A2:A").clear();
}
我需要将A1:F29中的图像(合并)保存到此公式创建的中间页中,然后保存到PDF。如果可能的话,将其保存在风景中也是很好的。
答案 0 :(得分:1)
1)缺少图像的问题是,您要进行两次复印过程,第一个过程是使用copyTo()函数正确地复制所有图纸。然后再用一个:
var destrange = sheet.getRange('A:I');
destrange.setValues(sourcevalues);
复制所有数据,甚至是“在单元格上”图像,但也不是“在单元格中”图像(可能是这是一个新的表格功能),这可能是您面临的问题。因此,您应该删除这两行代码,以便不覆盖第一个复制过程。那就是我所做的并且工作正常。
2)由于没有指定景观特征的选项,因此可以使用@cooper [1]向出口URL请求的链接中使用的方法。我实现了代码并按预期工作,您只需要删除以下两行即可:
var pdf = DriveApp.getFileById(newSpreadsheet.getId());
var theBlob = pdf.getBlob().getAs('application/pdf').setName("Sheet" + pdfname);
为此:
var url = newSpreadsheet.getUrl();
//remove the trailing 'edit' from the url
url = url.replace(/edit$/, '');
//additional parameters for exporting the sheet as a pdf
var url_ext = 'export?exportFormat=pdf&format=pdf' + //export as pdf
//below parameters are optional...
'&portrait=false' + //orientation, false for landscape
'&gid=' + newSpreadsheet.getSheetId(); //the sheet's Id
var token = ScriptApp.getOAuthToken();
var response = UrlFetchApp.fetch(url + url_ext, {
headers: {
'Authorization': 'Bearer ' + token
}
});
var theBlob = response.getBlob().setName("Sheet" + pdfname);
[1] https://ctrlq.org/code/19869-email-google-spreadsheets-pdf