현재 특정 시트를 가져 와서 셀 C8의 이메일 주소로 PDF로 보내는 스크립트가 있습니다.이 셀은 현재 영수증을 보내는 데 사용하므로 드롭 다운에서 이름을 선택하여 채워져 있습니다. 스크립트를 반복하고 각각의 사본과 함께 자동 이메일을 보내는 방법은 무엇입니까? 나는 이미 for
성명서로 시도했지만 지금까지 운이 없습니다. 내 코드 (완벽하게 작동하지만 단일 이메일에만 해당) 및 스프레드 시트 샘플 아래. 이것을 달성하는 방법에 대한 아이디어가 있습니까?
function emailSpreadsheetAsPDF() {
var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PDF").getRange("C8");
var email = emailRange.getValues();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("PDF"); // Enter the name of the sheet here
var subject = "Test Receipt ";
var body = "\n Please see attached your current test receipt: ";
// Base URL
var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", ss.getId());
/* Specify PDF export parameters
From: https://code.google.com/p/google-apps-script-issues/issues/detail?id=3579
*/
var url_ext = 'exportFormat=pdf&format=pdf' // export as pdf / csv / xls / xlsx
+ '&size=letter' // paper size legal / letter / A4
+ '&portrait=true' // orientation, false for landscape
+ '&fitw=true&source=labnol' // fit to page width, false for actual size
+ '&sheetnames=false&printtitle=false' // hide optional headers and footers
+ '&pagenumbers=false&gridlines=false' // hide page numbers and gridlines
+ '&fzr=false' // do not repeat row headers (frozen rows) on each page
+ '&gid='; // the sheet's Id
var token = ScriptApp.getOAuthToken();
var response = UrlFetchApp.fetch(url + url_ext + sheet.getSheetId(), {
headers : {
'Authorization' : 'Bearer ' + token
}
}).getBlob().setName(sheet.getName() + ".pdf");
// Uncomment the line below to save the PDF to the root of your drive.
// var newFile = DriveApp.createFile(response).setName(sheet.getName() + ".pdf")
if (MailApp.getRemainingDailyQuota() > 0)
GmailApp.sendEmail(email, subject, body, {
htmlBody : body,
attachments : [response]
});
}
https://docs.google.com/spreadsheets/d/1p4p9A9z8-EqlFGnlJ1o360gA8lcp-L29iuIPNylC4e8/edit?usp=sharing
나는 당신의 목표를 다음과 같이 믿습니다.
PDF
.처음에 about MATCH
, 세 번째 인수의 기본값은 1
입니다. 따라서 귀하의 경우에는 0
설정이 필요합니다. 따라서 "C8", "E17", "E19"및 "E21"의 공식을 다음과 같이 수정하십시오.
=INDEX(Sheet2!B3:B,MATCH(C6,Sheet2!A3:A,0))
=INDEX(Sheet2!C3:C,MATCH(C6,Sheet2!A3:A,0))
=INDEX(Sheet2!D3:D,MATCH(C6,Sheet2!A3:A,0))
=INDEX(Sheet2!E3:E,MATCH(C6,Sheet2!A3:A,0))
귀하의 경우에는 몇 가지 접근 방식이 있다고 생각합니다. 그래서이 답변에서 다음 흐름을 제안하고 싶습니다.
PDF
를 템플릿으로 복사합니다 .function myFunction() {
// 1. Retrieve values from "Sheet2".
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet2");
var values = sheet.getRange("A3:A" + sheet.getLastRow()).getValues();
var template = ss.getSheetByName("PDF");
var ssId = ss.getId();
var token = ScriptApp.getOAuthToken();
var filenameOfPdf = template.getSheetName();
// 2. Create sheets for converting to PDF data.
values.forEach(([v], i) => {
// 1. Copy the sheet `PDF` as the template.
var temp = template.copyTo(ss).setName("temp" + (i + 1));
// 2. Set the name at the cell "C6".
temp.getRange("C6").setValue(v);
SpreadsheetApp.flush();
var email = temp.getRange("C8").getValue();
// 3. Export the template sheet as the PDF data.
var subject = "Test Receipt ";
var body = "\n Please see attached your current test receipt: ";
var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", ssId);
var url_ext = 'exportFormat=pdf&format=pdf' // export as pdf / csv / xls / xlsx
+ '&size=letter' // paper size legal / letter / A4
+ '&portrait=true' // orientation, false for landscape
+ '&fitw=true&source=labnol' // fit to page width, false for actual size
+ '&sheetnames=false&printtitle=false' // hide optional headers and footers
+ '&pagenumbers=false&gridlines=false' // hide page numbers and gridlines
+ '&fzr=false' // do not repeat row headers (frozen rows) on each page
+ '&gid='; // the sheet's Id
var response = UrlFetchApp.fetch(url + url_ext + temp.getSheetId(), {headers : {'Authorization' : 'Bearer ' + token}}).getBlob().setName(filenameOfPdf + ".pdf");
// 4. Send an email using the email corresponding to the name of "C6".
if (MailApp.getRemainingDailyQuota() > 0)
GmailApp.sendEmail(email, subject, body, {htmlBody : body,attachments : [response]});
// 5. Delete the template sheet.
ss.deleteSheet(temp);
});
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다