select case to email different sheet depending on selection

问题描述 投票:1回答:1

Good morning,

I'm using the following script that converts a sheet to a .csv file and then emails it to a person.

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('[email protected]',
                     '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);
}

What i want to achieve is to be able to select a SHEET_NAME from a drop-down in cell A3.In this instance SHEET_NAME is "Biomisters.csv", but I have ten other sheets to choose from.I then need to change every instance in the code where "Biomisters.csv" is mentioned to the current selection in A3.

The RANGE doesn't change, the email address to send too doesn't change either.The only things that would change on selection are:SHEET_NAME; email subject line; email attachment

I look forward to hearing from you.

Best regardsmanc

P.S. I take no credit for the above code. I found it online and edited it in the most basic form to suit my needs.

email select google-apps-script export-to-csv
1个回答
1
投票
  • 使用方法 ss.getSheetByName("Name of the sheet with the dropdown").getRange("A3").getValue() 检索所选的下拉值,以二选一的方式。
  • 使用 SHEET_NAME.split(".")[0] 检索没有扩展名的工作表的名称--见 此处
  • 用一个变量代替硬编码的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('[email protected]',
                     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);
}
© www.soinside.com 2019 - 2024. All rights reserved.