Как создать ссылку, которая является запросом на получение Google Web App - PullRequest
0 голосов
/ 03 июня 2019

У меня есть кнопка в электронной таблице, которую я хочу, чтобы пользователи нажимали, чтобы запустить скрипт. Сценарий изменяет некоторые защищенные диапазоны, поэтому я опубликовал его как веб-приложение и настроил его запуск от имени меня.

Я нашел эти инструкции, объясняющие, что я пытаюсь выполнить:

Вы можете создать функцию с зарезервированным именем функции doGet () в своем проекте и опубликовать проект как веб-приложение. Ссылка - это запрос GET. При нажатии на ссылку, GET-запрос будет отправлен на опубликованный URL-адрес веб-приложения. Затем запустится функция doGet (). Запрос GET является «событием», а функция doGet () запускается событием запроса GET. doGet () «слушает» запрос GET. Вы можете передать информацию в функцию doGet (e), добавив параметр «event» в скобках. Обычно используется буква «е», но может использоваться любая буква

Мои вопросы, когда у меня есть URL веб-приложения, как мне создать ссылку, которая идет в веб-приложение и запускает его? Прямо сейчас я использую кнопку в электронной таблице и назначаю ей скрипт. Снимок экрана: https://imgur.com/OeMlczb Но это не работает.

А вот код, который я превратил в веб-приложение, которое нужно вызывать и запускать при нажатии кнопки:

function confirm(){
  var ui = SpreadsheetApp.getUi();
  var response = ui.alert('This will submit the timesheet. Do you want to continue?', ui.ButtonSet.YES_NO);
  if(response == ui.Button.NO) return;
  emailGoogleSpreadsheetAsPDF();
}

/* Email Google Spreadsheet as PDF */
function emailGoogleSpreadsheetAsPDF() {

  // Send the PDF of the spreadsheet to this email address
  var email = "email@gmail.com"; 
  var exclA=['Timesheet','Note','Settings','Data'];//and others
  var timeS=SpreadsheetApp.getActive().getSheetByName('Timesheet')
  var ss=SpreadsheetApp.getActive();
  var name=ss.getRange("Timesheet!J6").getValue();//trimmed the range down to match the getValue();
  var tname=ss.getRange("Timesheet!J6").getValue();
  var agency=ss.getRange("Timesheet!B4").getValue();//same here
  var fldr=DriveApp.getFolderById('abc123thu8h7r8888tbgyru');
  var fA=[];
  var today=Utilities.formatDate(new Date(),Session.getScriptTimeZone(),"MM/dd/yyyy");
  var subject=Utilities.formatString('%s has Submitted Their Timesheet and Notes',name); 
  var body=Utilities.formatString('This was submitted on %s',today);
  var shts=ss.getSheets();

  SpreadsheetApp.flush();//this may not be necessary...not sure
  var file=fldr.createFile(ss.getBlob().getAs('application/pdf')).setName(Utilities.formatString('%s_%s_%s_timesheet_notes.pdf', tname,agency,today));
  fA.push(file)

  for(var i=0;i<shts.length;i++) {
    var sh=shts[i];
    var name=sh.getName();
    if(exclA.indexOf(name)==-1) {
      sh.showSheet();
      for(var j=0;j<shts.length;j++) {
        if(shts[j].getName()!=name) {
          shts[j].hideSheet();
        }
      }
      SpreadsheetApp.flush();//this may not be necessary...not sure
      var file=fldr.createFile(ss.getBlob().getAs('application/pdf')).setName(Utilities.formatString('%s_%s_%s_note.pdf', name,agency,today));
      fA.push(file);
    }
  }
  for(var i=0;i<shts.length;i++) {
    if(exclA.indexOf(shts[i].getName())==-1) {
      shts[i].showSheet();
    }
  }
  timeS.showSheet();

  GmailApp.sendEmail(email,subject,body, {attachments:fA});
  for(var i=0;i<fA.length;i++) {
    fA[i].setTrashed(true); 
  }
  //CopyDataToNewFile();
}

function makeCopy() {
  var ss =SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Note');
  var dSheet = sheet.copyTo(SpreadsheetApp.openById(ss.getId()))
  dSheet.showSheet()
};

function CopyDataToNewFile(targetSheetName,targetSsId, sourceSheetName,sourceSsId) {
  var ss = SpreadsheetApp.openById('gnu84uw84nwutnst9ntrgbrn').getSheetByName('Timesheet');
  var ssd = SpreadsheetApp.openById('h3487g8bg8ybw4gy8wytb').getSheetByName('Sheet1');

  var therapist = ss.getRange('J6').getValues();
  var thedate = ss.getRange('A10').getValues();
  var theagency = ss.getRange('B4:C4').getValues();
  var thepayperiod = ss.getRange('B6:C6').getValues();
  var thecost = ss.getRange('E24').getValues();
  var themileage = ss.getRange('E27').getValues();

  ssd.getRange(ssd.getLastRow()+1,1,therapist.length,therapist[0].length).setValues(therapist);
  ssd.getRange(ssd.getLastRow()+0,2,thedate.length,thedate[0].length).setValues(thedate);
  ssd.getRange(ssd.getLastRow()+0,3,theagency.length,theagency[0].length).setValues(theagency);
  ssd.getRange(ssd.getLastRow()+0,4,thepayperiod.length,thepayperiod[0].length).setValues(thepayperiod);
  ssd.getRange(ssd.getLastRow()+0,5,thecost.length,thecost[0].length).setValues(thecost);
  ssd.getRange(ssd.getLastRow()+0,6,themileage.length,themileage[0].length).setValues(themileage);

}

Я просто не уверен, как структурировать это, и любая помощь очень ценится, спасибо!

1 Ответ

0 голосов
/ 03 июня 2019

Ссылка на веб-приложение - это просто закладка в моем браузере

Вот простой пример веб-приложения, которое я только что собрал для вас.

html:(Это пользовательский интерфейс). Все это делается в формате html, поэтому здесь можно использовать множество методов, в зависимости от ваших знаний о html, javascript, css и т. Д. .....

Но этоу одного просто есть одно текстовое поле и одна кнопка, и я не использовал JQuery или другие библиотеки.Это просто обычный старый школьный JavaScript и html.

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
    window.onload=function() {
      document.getElementById('hdg1').innerHTML="You are now connected to the server";

    };
    function runMyFunction() {
      var txt=document.getElementById('txt1').value;
      if(!txt) {
        alert("You have not entered any text");
      }else{
        google.script.run
        .withSuccessHandler(function(msg){
          document.getElementById('msg1').innerHTML=msg;
        })

        .myFunction(txt);
      }

    }
    console.log('aq4.html');
    </script>
  </head>
    <body>
    <h1 id="hdg1"></h1>
    <input type="text" id="txt1" placeholder="Put some text here" />
    <input type="button" value="myfunction" onclick="runMyFunction()" />
    <div id="msg1"></div>

  </body>
</html>

Google Script:

function myFunction(txt) {
  return "<h1>I have received your message and ran myFunction():</h1><strong>" + txt + "</strong>";
}

function doGet() {
  return HtmlService.createHtmlOutputFromFile('aq4');
}

Ссылка, на которую я ссылался, - это просто URL-адрес веб-приложения и все, что у вас естьЧтобы сделать это, добавьте эту ссылку в закладки, а затем нажмите на закладку в браузере.Я описываю это немного в этом видео

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...