我们正在尝试使用以下代码将单个工作表转换为单个PDF并将其通过电子邮件发送给包含在其中的电子邮件地址:
function myFunction(){
var ss = SpreadsheetApp.openById("YOUR_SPREADSHEET_ID");
var sheets = ss.getSheets();
var B2Values = [];
sheets.forEach(function(elt,index){
//Get all your email adresses
B2Values.push(sheets[index].getRange(2,2).getValue());
});
//For each sheet in your Spreadsheet, it create a temporary Spreadsheet
//who got only one sheet, with your sheet values,
// transform it as pdf, send the pdf by email to your B2 email adress and delete
//the temporary Spreadsheet
sheets.forEach(function(elt, index){
var temporarySS = SpreadsheetApp.create("NAME_OF_THE_FILE_WHO_WILL_BE_SENT");
var temporaryId = temporarySS.getId();
var dataToMove = sheets[index].getRange(1,1,sheets[index].getLastRow(),sheets[index].getLastColumn()).getValues();
var openingTemporarySS = SpreadsheetApp.openById(temporaryId);
dataToMove.forEach(function(elt){
openingTemporarySS.appendRow(elt);
})
MailApp.sendEmail({
to: B2Values[index],
subject: "YOUR_SUBJECT",
attachments: [openingTemporarySS.getAs('application/pdf')]
})
DriveApp.getFileById(temporaryId).setTrashed(true);
});
}
效果很好!但是它不保留合并的单元格和常规格式。关于如何进行这项工作的任何想法或想法?
如果我的理解是正确的,那么这个答案怎么样?请认为这只是几个可能的答案之一。
hideSheet()
。例如,电子表格中有2张纸,并且当hideSheet()
隐藏第一个选项卡并且电子表格被导出为PDF数据时,仅第二个选项卡被导出为PDF数据。我认为这可以用于您的情况。而且,这还可以降低过程成本。当上述几点反映到您的脚本时,它将变成如下。
function myFunction(){
var ss = SpreadsheetApp.openById("YOUR_SPREADSHEET_ID");
var sheets = ss.getSheets();
var B2Values = [];
sheets.forEach(function(elt,index){
//Get all your email adresses
B2Values.push(sheets[index].getRange(2,2).getValue()); // You can also use B2Values.push(elt.getRange(2,2).getValue());
});
// I modified below script.
B2Values.forEach(function(e, i) {
sheets.forEach(function(sheet, j) {if (i != j) sheet.hideSheet()});
// SpreadsheetApp.flush(); // By the situation, this line might be required.
MailApp.sendEmail({
to: e,
subject: "YOUR_SUBJECT",
attachments: [ss.getBlob()]
});
sheets.forEach(function(sheet) {sheet.showSheet()});
});
}
如果我误解了你的问题,而这不是你想要的方向,我深表歉意。