【问题标题】:Select case to email different sheet depending on selection根据选择选择案例以通过电子邮件发送不同的工作表
【发布时间】:2020-05-28 06:41:34
【问题描述】:

我正在使用以下脚本将工作表转换为 .csv 文件,然后通过电子邮件将其发送给某人。

RANGE="A1:AC20";
SHEET_NAME="Biomisters.csv";


//Types available : pdf,csv or xlsx
EXPORT_TYPE="csv";

function EmailBiomisters() {
  //Assign The Spreadsheet,Sheet,Range to variables
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sheet=ss.getSheetByName(SHEET_NAME);
  var range=sheet.getRange(RANGE);
  
  //Range values to export
  var values=range.getValues();
  
  //Create temporary sheet
  var sheetName=Utilities.formatDate(new Date(), "GMT", "MM-dd-YYYY hh:mm:ss");
  var tempSheet=ss.insertSheet(sheetName);
  
  //Copy range onto that sheet
  tempSheet.getRange(1, 1, values.length, values[0].length).setValues(values);  
  
  //Save active sheets (Unhidden)
  var unhidden=[];
  for(var i in ss.getSheets()){
      if(ss.getSheets()[i].getName()==sheetName) continue;
      if(ss.getSheets()[i].isSheetHidden()) continue;
      unhidden.push(ss.getSheets()[i].getName());
      ss.getSheets()[i].hideSheet();
  }
  
  //Authentification 
  var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};

  var url="https://docs.google.com/spreadsheets/d/"+ss.getId()+"/export?format="+EXPORT_TYPE;
          
  //Fetch URL of active spreadsheet
  var fetch=UrlFetchApp.fetch(url,params);
  
  //Get content as blob
  var blob=fetch.getBlob(); 
  
  var mimetype;
  if(EXPORT_TYPE=="pdf"){
      mimetype="application/pdf";      
  }else if(EXPORT_TYPE=="csv"){
      mimetype="text/csv";    
  }else if(EXPORT_TYPE=="xlsx"){
      mimetype="application/xlsx";   
  }else{
      return;
  }
  
  //Send Email
  var sheet1 = ss.getSheetByName('data').getRange("B1").getValue();
  //var mesbody = sheet1.getRange("B1");
  GmailApp.sendEmail('test@test.com',
                     'Biomisters.csv', 
                     sheet1,
                     {
                         attachments: [{
                         fileName: "Biomisters" + "."+EXPORT_TYPE,
                         content: blob.getBytes(),
                         mimeType: mimetype
                      }]
    });
  
  //Reshow the sheets
  for(var i in unhidden){
      ss.getSheetByName(unhidden[i]).showSheet();
  }
  
  //Delete the temporary sheet
  ss.deleteSheet(tempSheet);
}

我想要实现的是能够从单元格 A3 的下拉列表中选择 SHEET_NAME。
在本例中,SHEET_NAME 是“Biomisters.csv”,但我还有其他十张表可供选择。
然后,我需要将代码中提到“Biomisters.csv”的每个实例更改为 A3 中的当前选择。

范围没有改变,发送的电子邮件地址也没有改变。 选择时唯一会改变的是:

SHEET_NAME;电子邮件主题行;电子邮件附件

附:我不相信上面的代码。我在网上找到了它,并以最基本的形式对其进行了编辑以满足我的需要。

【问题讨论】:

  • 单元格A3在哪个工作表中,下拉菜单位于?

标签: email google-apps-script export-to-csv


【解决方案1】:
  • 使用ss.getSheetByName("Name of the sheet with the dropdown").getRange("A3").getValue() 动态检索下拉列表的选定值
  • 使用SHEET_NAME.split(".")[0] 检索不带扩展名的工作表名称 - 请参阅here
  • 用变量替换硬编码的 subjet

示例:

RANGE="A1:AC20";

//Types available : pdf,csv or xlsx
EXPORT_TYPE="csv";

function EmailBiomisters() {
  //Assign The Spreadsheet,Sheet,Range to variables
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var SHEET_NAME=ss.getSheetByName("Name of the sheet with the dropdown").getRange("A3").getValue();//"Biomisters.csv";
  var sheet=ss.getSheetByName(SHEET_NAME);
  var range=sheet.getRange(RANGE);

  //Range values to export
  var values=range.getValues();

  //Create temporary sheet
  var sheetName=Utilities.formatDate(new Date(), "GMT", "MM-dd-YYYY hh:mm:ss");
  var tempSheet=ss.insertSheet(sheetName);

  //Copy range onto that sheet
  tempSheet.getRange(1, 1, values.length, values[0].length).setValues(values);  

  //Save active sheets (Unhidden)
  var unhidden=[];
  for(var i in ss.getSheets()){
      if(ss.getSheets()[i].getName()==sheetName) continue;
      if(ss.getSheets()[i].isSheetHidden()) continue;
      unhidden.push(ss.getSheets()[i].getName());
      ss.getSheets()[i].hideSheet();
  }

  //Authentification 
  var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};

  var url="https://docs.google.com/spreadsheets/d/"+ss.getId()+"/export?format="+EXPORT_TYPE;

  //Fetch URL of active spreadsheet
  var fetch=UrlFetchApp.fetch(url,params);

  //Get content as blob
  var blob=fetch.getBlob(); 

  var mimetype;
  if(EXPORT_TYPE=="pdf"){
      mimetype="application/pdf";      
  }else if(EXPORT_TYPE=="csv"){
      mimetype="text/csv";    
  }else if(EXPORT_TYPE=="xlsx"){
      mimetype="application/xlsx";   
  }else{
      return;
  }

  //Send Email
  var sheet1 = ss.getSheetByName('data').getRange("B1").getValue();
  //var mesbody = sheet1.getRange("B1");
  var subject = SHEET_NAME;
  var nameWithoutExtension = SHEET_NAME.split(".")[0];
  GmailApp.sendEmail('test@test.com',
                     subject, 
                     sheet1,
                     {
                         attachments: [{
                         fileName: nameWithoutExtension + "."+EXPORT_TYPE,
                         content: blob.getBytes(),
                         mimeType: mimetype
                      }]
    });

  //Reshow the sheets
  for(var i in unhidden){
      ss.getSheetByName(unhidden[i]).showSheet();
  }

  //Delete the temporary sheet
  ss.deleteSheet(tempSheet);
}

【讨论】:

    猜你喜欢
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 2022-07-17
    相关资源
    最近更新 更多