将两个不同工作表的不同范围导出到一个PDF文件



我尝试从两个不同工作表的两个不同范围导出一个PDF文件。我需要一个单独的打印文档(PDF)与两个站点在景观..

地盘1:Sheetname1 -范围A1:G17

地盘2:Sheetname2 -范围A1:M22

我的代码生成一个PDF文件从一个范围的工作表到驱动器中的文件夹,并发送电子邮件与此文件附加到接收者列表。但是我不知道如何从两个不同的工作表导出两个不同范围的两个站点pdf文件。

希望有人能帮我一把……

的问候
var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var weighingsheet = activeSpreadSheet.getSheetByName("Weighing");
var datasheet = activeSpreadSheet.getSheetByName("Data");

var url = "https://docs.google.com/spreadsheets/d/" + activeSpreadSheet.getId() + "/export?"
var params = 'exportFormat=pdf&format=pdf'
+ '&portrait=false'
+ '&fitw=true'
+ '&top_margin=0.50'              
+ '&bottom_margin=0.50'          
+ '&left_margin=0.30'             
+ '&right_margin=0.30'
+ '&horizontal_alignment=CENTER'
+ '&vertical_alignment=MIDDLE'
+ '&gid=' + weighingsheet.getSheetId()
+ '&range=A1:G17';
var token = ScriptApp.getOAuthToken(); 
var response = UrlFetchApp.fetch(url + params, { 
'headers': {
'Authorization': 'Bearer ' + token
}
});  
var fileName = datasheet.getRange("Q14").getValue() + ".pdf";
var theBlob = response.getBlob().setName(fileName);
var folderID = "12345678901234567890";
var folder = DriveApp.getFolderById(folderID);
folder.createFile(theBlob);

MailApp.sendEmail(datasheet.getRange("M3").getValue() + ", " + datasheet.getRange("M4").getValue() + ", " + datasheet.getRange("M5").getValue() + ", " + datasheet.getRange("M6").getValue() + ", " + datasheet.getRange("M7").getValue() + ", " + datasheet.getRange("M8").getValue() + ", " + datasheet.getRange("M9").getValue() + ", " + datasheet.getRange("M10").getValue() + ", " + datasheet.getRange("M11").getValue() + ", " + datasheet.getRange("M12").getValue(),
datasheet.getRange("Q3").getValue(), datasheet.getRange("Q4").getValue(), {attachments:[theBlob]});

作为一种变通方法,我将使用class HTMLOutput

这是我的方法:

function test() {
// Add spreadsheets as needed 
var spreadsheetsToProcess = [
{
spreadsheetId: "ID_SPREADSHEET",
sheetName: "SHEET NAME",
rangeA1Notation: "A1:G17"
},
{
spreadsheetId: "ID_SPREADSHEET",
sheetName: "SHEET NAME",
rangeA1Notation: "A1:M22"
}
];
var file = getPDF(spreadsheetsToProcess);
MailApp.sendEmail("example@example.com", 'Attachment example', 'Two spreadsheets at once.', {attachments:[file]});
}
function getPDF(spreadsheets) {
var html = "<h2>Example 2 ranges from different Spreadsheets</h2>";
spreadsheets.forEach(spreadsheet => {
var ss = SpreadsheetApp.openById(spreadsheet.spreadsheetId);
var sheet = ss.getSheetByName(spreadsheet.sheetName);
var data = sheet.getRange(spreadsheet.rangeA1Notation).getValues();
html += "<h3>Example</h3><table style='width:100%; border: 1px solid black'>";
data.forEach(row => {
html += "<tr style='border: 1px solid black'>";
row.forEach(cell => {
html += `<td style='border: 1px solid black'>${cell}</td>`;
})
html += "</tr>";
});
html += "</table><br/>";
})
var output = HtmlService.createHtmlOutput(html);
var pdf = output.getAs('application/pdf').setName("export.pdf");
return pdf;
}

您可以轻松地将此代码修改为您的代码,其中测试将发送邮件和getPDF将得到一个由spreadsheetId,sheetNamerangeA1Notation组成的对象数组。类HTMLService将允许你从一个字符串创建一个HTMLOutput,然后你可以根据需要定制它。一旦你得到这个HTML,你可以使用getAs方法将其转换为PDF,它将返回一个Blob,你可以通过MailApp发送。

最新更新