Таблица скриптов Google - мне нужно запустить один скрипт из нескольких кнопок, но с разными параметрами - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть две кнопки (Button1 и Button2) и одна функция: MyFunction (число).И мне нужно либо передать параметр в функцию, либо узнать, с какой кнопки была запущена функция.Возможно ли это?

function MakePDF(number) {

  var ui = SpreadsheetApp.getUi();

  //Get Active Spreadsheet
  var spreadSheet=SpreadsheetApp.getActiveSpreadsheet();
  spreadSheet.getRange('B2').setValue(number); //HERE I NEED TO GET THE SPECIFIC NUMBER FROM 1 TO 100

  //Get Sheet to print of the spreadsheets
  var sheets=spreadSheet.getSheets();
  var Faktura = spreadSheet.getSheetByName("Invoice");
  var sheetID = Faktura.getSheetId();

  //Export URL with Parameters
  var spreadSheetId = spreadSheet.getId();
  var URL = "https://docs.google.com/spreadsheets/d/"+spreadSheetId+"/export"+
                                                        "?format=pdf&"+
                                                        "size=7&"+
                                                        "fzr=false&"+
                                                        "portrait=true&"+
                                                        "fitw=true&"+
                                                        "gridlines=false&"+
                                                        "printtitle=false&"+
                                                        "sheetnames=false&"+
                                                        "pagenum=UNDEFINED&"+
                                                        "attachment=true&"+
                                                        "gid="+sheetID; 
   //the HTTP method for the request: get and headers : authorization : Bearer tokens to access OAuth 2.0-protected resources
   var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};

   //Return the data inside this object as a blob.
   var response=UrlFetchApp.fetch(URL,params).getBlob();

   //To set name of file
   var VS = listOvladani.getRange('B6').getValue();
   var firma = listOvladani.getRange('B5').getValue();
   firma = removeDiak(firma);
   firma = firma.toString().replace(/ /g, '-');
   firma = firma.toString().replace(/\./g,'');
   firma = firma.toString().replace(/,/g,'');

   var namePDF = VS + "_" + firma + "_Autonapul.pdf";

   // Load it to specific directory
   var dir = DriveApp.getFoldersByName("Rucnifaktury").next();
   var pdfFile = dir.createFile(response).setName(namePDF);

   // Display a modal dialog box with custom HtmlService content.
   const htmlOutput = HtmlService
        .createHtmlOutput('<p>Click to open <a href="' + pdfFile.getUrl() + '" target="_blank">' + spreadSheet.getName() + '</a></p>')
        .setWidth(300)
        .setHeight(80)
      SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Export Successful');


   //Email it
/*   MailApp.sendEmail('trnka@trnka.cz', 'Pokus', 'Nějaký text', {
        attachments: [{
            fileName: "Faktura_pokusna" + ".pdf",
            content: response.getBytes(),
            mimeType: "application/pdf"
        }]
    });
*/    

}

Подробнее Подробнее Подробнее Подробнее Подробнее Подробнее Подробнее Подробнее Подробнее Подробнее

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Вы можете использовать еще две функции, которые просто вызывают основную функцию с другим параметром, поэтому кнопка 1 вызывает pressButton1, а кнопка 2 вызывает pressButton2.

function MakePDF(number) {
  //do stuff
}
function pressButton1(){
  MakePDF(1);
}
function pressButton2(){
  MakePDF(2);
}

Это самый простой способ справиться с ситуацией.

1 голос
/ 26 сентября 2019

Вы можете сделать это по-другому:

Заменить кнопки с помощью флажков и привязать к вашему скрипту onEdit (e) триггер , который будет автоматически запускать скрипт при каждом редактировании.

Вы можете реализовать оператор, чтобы проверить, был ли отредактированный столбец вашим столбцом флажка, и если да, то какой флажок был установлен.

Пример:

enter image description here

function onEdit(e) {
  if(e.range.getColumn()==2&&e.range.getValue()==true){
  Logger.log(e.range.getA1Notation());
  }
}

Ссылки:

...