跨多个电子表格运行脚本(googlesheet)

时间:2016-05-10 15:48:51

标签: google-apps-script google-sheets

我目前正在运行一个脚本,该脚本需要一张表,将其转换为PDF并每晚通过电子邮件发送到一个电子邮件地址。我在三个单独的电子表格中执行此操作。我不想在每个电子表格上单独运行,而是想查看是否有人调用每个电子表格,并运行一次脚本并将所有PDF附加到一封电子邮件中。它本身很好用,但我觉得如果我可以让一个电子表格运行一次该函数并合并其他电子表格,那将是有意义的。任何方向都会有所帮助谢谢!

我使用的脚本如下

function PDFtoEmail() {
  var email = "email@gmail.com"; 
     var ss = SpreadsheetApp.getActiveSpreadsheet();
     SpreadsheetApp.setActiveSheet(ss.getSheetByName('Schedule 1'));
     var sheet = ss.getActiveSheet();
  var subject = "Nightly Scheduled PDF";
  var body = "";
  var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", ss.getId());
  var url_ext = 'exportFormat=pdf&format=pdf'
  + '&size=letter'   
  + '&portrait=true'
  + '&fitw=true&source=labnol'    
  + '&sheetnames=false&printtitle=false' 
  + '&pagenumbers=false&gridlines=false' 
  + '&fzr=true'
  + '&gid=';  

  var token = ScriptApp.getOAuthToken();
  var sheets = ss.getSheets(); 
  var PDFtoEmail = [];
   for(var i = 0; i < 3; i++){
      var response = UrlFetchApp.fetch(url + url_ext +    sheets[i].getSheetId(), {
headers: {
  'Authorization': 'Bearer ' +  token
}
});
   PDFtoEmail[i] = response.getBlob().setName("Schedule.pdf");
}
if (MailApp.getRemainingDailyQuota() > 0) 
GmailApp.sendEmail(email, subject, body, {
  attachments:PDFtoEmail,
});

}

1 个答案:

答案 0 :(得分:2)

SpreadsheetApp.openByUrl()可以打开(供脚本使用,不会在浏览器窗口中打开)电子表格,而不是当前处于活动状态的电子表格。 openByID同样有效。

var sheets = [firstsheeturl, secondsheeturl,thirdsheeturl];
   for(var i = 0; i < sheets.length; i++){
     var ss = SpreadsheetApp.openByUrl(sheets[i]);
     //code to do on all three sheets
   }