简体   繁体   English

Appscript - 将谷歌日历事件抓取到电子表格

[英]Appscript - Grab google calendar event to a spreadsheet

I built a code that grabs only one type of google calendar event and sends the information to a spreadsheet.我构建了一个代码,它只抓取一种类型的谷歌日历事件并将信息发送到电子表格。 It works, but now I need to turn this function into an html dropdown list, I tried several options but when I click OK it doesn't run.它可以工作,但现在我需要将此 function 转换为 html 下拉列表,我尝试了几个选项,但是当我单击“确定”时它不会运行。 What should I change?我应该改变什么? I'll leave the old code (works) and try a new one (doesn't work).我将保留旧代码(有效)并尝试新代码(无效)。

Old:老的:

function onOpen(e) {

  // MENU
  
  let ui = SpreadsheetApp.getUi()

  ui.createMenu("⚡")
    .addItem("⏹ Atualizar Reuniões", "atualReunioes")
    .addItem('📝 Editar Dados', 'formDados')
    .addItem('📝 Editar Dados', 'formReunioes')
    .addToUi()
}

function atualReunioes() {
  var ui = SpreadsheetApp.getUi()
  var result = ui.prompt("Informe o mês (1 - 12) para transferir as reuniões", Browser.Buttons.OK_CANCEL)
  var escolha = parseInt(result.getResponseText(), 10)

  switch (escolha) {
    case 1:
      dtIni = new Date("2022-01-01T00:00:00")
      dtFim = new Date("2022-01-31T23:59:00")
      break

    case 2:
      dtIni = new Date("2022-02-01T00:00:00")
      dtFim = new Date("2022-02-29T23:59:00")
      break

    case 3:
      dtIni = new Date("2022-03-01T00:00:00")
      dtFim = new Date("2022-03-31T23:59:00")
      break

    case 4:
      dtIni = new Date("2022-04-01T00:00:00")
      dtFim = new Date("2022-04-30T23:59:00")
      break

    case 5:
      dtIni = new Date("2022-05-01T00:00:00")
      dtFim = new Date("2022-05-31T23:59:00")
      break

    case 6:
      dtIni = new Date("2022-06-01T00:00:00")
      dtFim = new Date("2022-06-30T23:59:00")
      break

    case 7:
      dtIni = new Date("2022-07-01T00:00:00")
      dtFim = new Date("2022-07-31T23:59:00")
      break

    case 8:
      dtIni = new Date("2022-08-01T00:00:00")
      dtFim = new Date("2022-08-31T23:59:00")
      break

    case 9:
      dtIni = new Date("2022-09-01T00:00:00")
      dtFim = new Date("2022-09-30T00:00:00")
      break

    case 10:
      dtIni = new Date("2022-10-01T00:00:00")
      dtFim = new Date("2022-10-31T00:00:00")
      break

    case 11:
      dtIni = new Date("2022-11-01T00:00:00")
      dtFim = new Date("2022-11-30T00:00:00")
      break

    case 12:
      dtIni = new Date("2022-12-01T00:00:00")
      dtFim = new Date("2022-12-31T23:59:00")
      break

    default:

      if (result.getSelectedButton() === ui.Button.CANCEL || ui.Button.CLOSE) {
        Browser.msgBox("⛔️ CANCELADO! ⛔️")

      } else {
        Browser.msgBox("Informe valor entre 1 e 12")
      
      } return
  }

  if (result.getSelectedButton() === ui.Button.OK) {
    var aba = "Reuniões"

    myCalendar(aba, dtIni, dtFim)
    ordenaPlan(aba)

  }
}

function toStringFromHtml(html) {
  var text = html.replace(/<br>/g, '\n')

  text = text.replace(/<[^>]+>/g, "")
  text = text.replace(/&nbsp;/g, "")

  return text
}

// BUSCA CALENDÁRIO

function myCalendar(planilha, dataini, datafim) {
  var calendar = CalendarApp.getCalendarById("gaesp@mppr.mp.br")
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(planilha)
  var eventosAgenda = calendar.getEvents(dataini, datafim, { search: 'Reunião' })
  var ultLin = sheet.getLastRow() + 1

  eventosAgenda = eventosAgenda.concat(calendar.getEvents(dataini, datafim, { search: 'Visita' }))

  for (var i = 0; i < eventosAgenda.length; i++) {

    StartTime = eventosAgenda[i].getStartTime()
    Title = eventosAgenda[i].getTitle()
    DescriptionTemp = eventosAgenda[i].getDescription()
    Description = toStringFromHtml(DescriptionTemp)

    sheet.getRange(ultLin + i, 1).setValue(StartTime)
    sheet.getRange(ultLin + i, 5).setValue(Title)
    sheet.getRange(ultLin + i, 6).setValue(Description)

    var depur = {
      'Última linha': ultLin,
      'Iterador': i,
      'Data': StartTime,
      'Título': Title,
      'Descrição': Description
    }
    console.log(depur)
  }
}

// ORDENAÇÃO DA ABA REUNIÕES

function ordenaPlan(planilha) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(planilha)
  var intervalo = sheet.getRange("A2:H")

  intervalo.sort({ column: 1 })
}

New code.gs代码.gs

function onOpen(e) {

  // MENU
  
  let ui = SpreadsheetApp.getUi()

  ui.createMenu("⚡")
    .addItem("⏹ Atualizar Reuniões", "atualReunioes")
    .addItem('📝 Editar Dados', 'formDados')
    .addItem('📝 Editar Dados', 'formReunioes')
    .addToUi()
}

/// UPDATE MEETS

function atualReunioes() {
  var ui = SpreadsheetApp.getUi()
  var result = [Resp]
  //var result = ui.prompt("Informe o mês (1 - 12) para transferir as reuniões", Browser.Buttons.OK_CANCEL)
  //var escolha = parseInt(result.getResponseText(), 10)
  var form = HtmlService.createTemplateFromFile("html2.html")
  var eita = form.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)

  eita.setHeight(335).setWidth(260)
  ui.showModalDialog(eita, 'Atualizar Reuniões ⏹')
  
  var checarBotaoOK = ['Button1']
  var checarBotaoCancel = ['Button2']
  
  switch (result) {
    case 1:
      dtIni = new Date("2022-01-01T00:00:00")
      dtFim = new Date("2022-01-31T23:59:00")
      break

    case 2:
      dtIni = new Date("2022-02-01T00:00:00")
      dtFim = new Date("2022-02-29T23:59:00")
      break

    case 3:
      dtIni = new Date("2022-03-01T00:00:00")
      dtFim = new Date("2022-03-31T23:59:00")
      break

    case 4:
      dtIni = new Date("2022-04-01T00:00:00")
      dtFim = new Date("2022-04-30T23:59:00")
      break

    case 5:
      dtIni = new Date("2022-05-01T00:00:00")
      dtFim = new Date("2022-05-31T23:59:00")
      break

    case 6:
      dtIni = new Date("2022-06-01T00:00:00")
      dtFim = new Date("2022-06-30T23:59:00")
      break

    case 7:
      dtIni = new Date("2022-07-01T00:00:00")
      dtFim = new Date("2022-07-31T23:59:00")
      break

    case 8:
      dtIni = new Date("2022-08-01T00:00:00")
      dtFim = new Date("2022-08-31T23:59:00")
      break

    case 9:
      dtIni = new Date("2022-09-01T00:00:00")
      dtFim = new Date("2022-09-30T00:00:00")
      break

    case 10:
      dtIni = new Date("2022-10-01T00:00:00")
      dtFim = new Date("2022-10-31T00:00:00")
      break

    case 11:
      dtIni = new Date("2022-11-01T00:00:00")
      dtFim = new Date("2022-11-30T00:00:00")
      break

    case 12:
      dtIni = new Date("2022-12-01T00:00:00")
      dtFim = new Date("2022-12-31T23:59:00")
      break
      
      default:

      if (result == null) {
        ui.alert("⛔️ CANCELADO! ⛔️")

      } else {
        ui.alert('Aguarde ⏰', ui.ButtonSet.OK)
      
      } return
  }
   if (result == Number) {
    var aba = "Reuniões"

    myCalendar(aba, dtIni, dtFim)
    ordenaPlan(aba)

  }
}

function toStringFromHtml(html) {
  var text = html.replace(/<br>/g, '\n')

  text = text.replace(/<[^>]+>/g, "")
  text = text.replace(/&nbsp;/g, "")

  return text
}

// SEARCH CALENDAR

function myCalendar(planilha, dataini, datafim) {
  var calendar = CalendarApp.getCalendarById("gaesp@mppr.mp.br")
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(planilha)
  var eventosAgenda = calendar.getEvents(dataini, datafim, { search: 'Reunião' })
  var ultLin = sheet.getLastRow() + 1

  eventosAgenda = eventosAgenda.concat(calendar.getEvents(dataini, datafim, { search: 'Visita' }))

  for (var i = 0; i < eventosAgenda.length; i++) {

    StartTime = eventosAgenda[i].getStartTime()
    Title = eventosAgenda[i].getTitle()
    DescriptionTemp = eventosAgenda[i].getDescription()
    Description = toStringFromHtml(DescriptionTemp)

    sheet.getRange(ultLin + i, 1).setValue(StartTime)
    sheet.getRange(ultLin + i, 5).setValue(Title)
    sheet.getRange(ultLin + i, 6).setValue(Description)

    var depur = {
      'Última linha': ultLin,
      'Iterador': i,
      'Data': StartTime,
      'Título': Title,
      'Descrição': Description
    }
    console.log(depur)
  }
}


function ordenaPlan(planilha) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(planilha)
  var intervalo = sheet.getRange("A2:H")

  intervalo.sort({ column: 1 })
}

html.html html.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
 <body style="font-family: Segoe, 'Segoe UI', 'DejaVu Sans', 'Trebuchet MS', Verdana, sans-serif; font-size: 90%">
  <p>Selecione o mês para transferir as reuniões:<br>
    <select id="Campo1" title="Mês" style="width:188px">
    <option value = "" disabled selected>Selecione</option>
    <option value = "Janeiro">Janeiro</option>
    <option value = "Fevereiro">Fevereiro</option>
    <option value = "Março">Março</option>
    <option value = "Abril">Abril</option>
    <option value = "Maio">Maio</option>
    <option value = "Junho">Junho</option>
    <option value = "Julho">Julho</option>
    <option value = "Agosto">Agosto</option>
    <option value = "Setembro">Setembro</option>
    <option value = "Outubro">Outubro</option>
    <option value = "Novembro">Novembro</option>
    <option value = "Dezembro">Dezembro</option>
    </select>
  </p>
  <span style="text-align: center">
    <button onclick="clickOk()" style="color:#FFFFFF;background:#073763">Ok</button>
    &nbsp;
    <button onclick="google.script.host.close()">Cancelar</button>
  </span>
  <script>
    function clickOk() {
      var Resp1 = document.getElementById('Campo1').value

      google.script.run.switch(Resp1)
    }
  </script>
  </body>
</html>

In your situation, how about the following modification?在您的情况下,如何进行以下修改? In this modification, your New code.gs and html.html are modified.在此修改中,您的New code.gshtml.html被修改。

New code.gs : New code.gs

In this modification, from New code.gs , I modified atualReunioes() and added a new function of nextFunction(result) .在这次修改中,我从New code.gs修改atualReunioes()并添加了nextFunction(result)的新 function 。 Other functions are not modified.其他功能没有修改。 Because from It works , I guessed that your other functions of myCalendar(aba, dtIni, dtFim);因为从It works ,我猜你的myCalendar(aba, dtIni, dtFim); and ordenaPlan(aba);ordenaPlan(aba); work fine.工作正常。 Please be careful about this.请注意这一点。

By the way, in your showing HTML, the filename is html.html .顺便说一句,在您展示 HTML 时,文件名为html.html But in your showing script, it's html2.html .但是在您的显示脚本中,它是html2.html Please be careful about this.请注意这一点。

// I modified this function.
function atualReunioes() {
  var form = HtmlService.createTemplateFromFile("html.html");
  var eita = form.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setHeight(335).setWidth(260);
  SpreadsheetApp.getUi().showModalDialog(eita, 'Atualizar Reuniões ⏹');
}

// Added this new function.
function nextFunction(result) {
  result = Number(result);
  switch (result) {
    case 1:
      dtIni = new Date("2022-01-01T00:00:00");
      dtFim = new Date("2022-01-31T23:59:00");
      break;
    case 2:
      dtIni = new Date("2022-02-01T00:00:00");
      dtFim = new Date("2022-02-29T23:59:00");
      break;
    case 3:
      dtIni = new Date("2022-03-01T00:00:00");
      dtFim = new Date("2022-03-31T23:59:00");
      break;
    case 4:
      dtIni = new Date("2022-04-01T00:00:00");
      dtFim = new Date("2022-04-30T23:59:00");
      break;
    case 5:
      dtIni = new Date("2022-05-01T00:00:00");
      dtFim = new Date("2022-05-31T23:59:00");
      break;
    case 6:
      dtIni = new Date("2022-06-01T00:00:00");
      dtFim = new Date("2022-06-30T23:59:00");
      break;
    case 7:
      dtIni = new Date("2022-07-01T00:00:00");
      dtFim = new Date("2022-07-31T23:59:00");
      break;
    case 8:
      dtIni = new Date("2022-08-01T00:00:00");
      dtFim = new Date("2022-08-31T23:59:00");
      break;
    case 9:
      dtIni = new Date("2022-09-01T00:00:00");
      dtFim = new Date("2022-09-30T00:00:00");
      break;
    case 10:
      dtIni = new Date("2022-10-01T00:00:00");
      dtFim = new Date("2022-10-31T00:00:00");
      break;
    case 11:
      dtIni = new Date("2022-11-01T00:00:00");
      dtFim = new Date("2022-11-30T00:00:00");
      break;
    case 12:
      dtIni = new Date("2022-12-01T00:00:00");
      dtFim = new Date("2022-12-31T23:59:00");
      break;
  }
  var aba = "Reuniões";
  myCalendar(aba, dtIni, dtFim);
  ordenaPlan(aba);
}

html.html : html.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
 <body style="font-family: Segoe, 'Segoe UI', 'DejaVu Sans', 'Trebuchet MS', Verdana, sans-serif; font-size: 90%">
  <p>Selecione o mês para transferir as reuniões:<br>
    <select id="Campo1" title="Mês" style="width:188px">
    <option value = "" disabled selected>Selecione</option>
    <option value = "1">Janeiro</option>
    <option value = "2">Fevereiro</option>
    <option value = "3">Março</option>
    <option value = "4">Abril</option>
    <option value = "5">Maio</option>
    <option value = "6">Junho</option>
    <option value = "7">Julho</option>
    <option value = "8">Agosto</option>
    <option value = "9">Setembro</option>
    <option value = "10">Outubro</option>
    <option value = "11">Novembro</option>
    <option value = "12">Dezembro</option>
    </select>
  </p>
  <span style="text-align: center">
    <button onclick="clickOk()" style="color:#FFFFFF;background:#073763">Ok</button>
    &nbsp;
    <button onclick="google.script.host.close()">Cancelar</button>
  </span>
  <script>
    function clickOk() {
      var Resp1 = document.getElementById('Campo1').value;
      console.log(Resp1)
      google.script.run.nextFunction(Resp1);
    }
  </script>
  </body>
</html>
  • In this modified script, when you run atualReunioes() , a dialog is opened.在这个修改后的脚本中,当您运行atualReunioes()时,会打开一个对话框。 When you select one of options in the dropdown list and click "ok" button, the number value is returned to nextFunction function.当您 select 下拉列表中的选项之一并单击“确定”按钮时,数值返回到nextFunction function。 By this, the script works.这样,脚本就可以工作了。

  • In your showing script, at google.script.run.switch(Resp1) , you might have tried to run switch (result) {} .在您的显示脚本中,在google.script.run.switch(Resp1)中,您可能已尝试运行switch (result) {} In this case, the script cannot be run.在这种情况下,脚本无法运行。 Please be careful about this.请注意这一点。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM