Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

292
Visualizações
activador onEdit () para eliminar las celdas editadas eventId y luego crear una nueva

Tengo la siguiente secuencia de comandos que, cuando se llama, creará eventos en un calendario de Google en función de las entradas de las hojas de Google. Las funciones 'onOpen()' y 'scheduleShifts()' funcionan como se esperaba, si tiene alguna mejora, estaría más que feliz de implementarla.

 function onOpen(){ var ui = SpreadsheetApp.getUi(); var menu = ui.createMenu("Sync to Calendar") menu.addItem("Schedule Shifts Now", "scheduleShifts") menu.addToUi(); } function scheduleShifts(){ var spreadsheet = SpreadsheetApp.getActiveSheet(); var calendarId = spreadsheet.getRange("C4").getValue(); var eventCal = CalendarApp.getCalendarById(calendarId); var signups = spreadsheet.getRange("A8:D12").getValues(); for (let x = 0; x < signups.length; x++) { var shift = signups[x]; var startTime = shift[0]; var endTime = shift[1]; var volunteer = shift[2]; var eventId = shift[3]; if (eventId == ""){ var newEvent = eventCal.createEvent(volunteer, startTime, endTime); var newEventId = newEvent.getId(); spreadsheet.getRange(8 + x, 4).setValue(newEventId); } } }

El problema que tengo se basa en el activador onEdit (), quiero que el activador elimine el eventId que corresponde a los datos editados, en este caso, es simplemente el título del evento y luego crea un nuevo evento basado en el datos editados. Sin embargo, cuando edito datos de la matriz de celdas, nada cambia en el calendario de Google. Cualquier ayuda para este problema sería apreciada.

 function onEdit(e){ var editedData = e.source.getActiveSheet().getRange(8, 3, 1, 5).getValues()[2]; var event = editedData[3] try{ // print(event); event.deleteEventSeries(); shift[3] = ''; } catch(e){ } }

Para mayor claridad en las hojas de Google, las columnas son: Hora de inicio / Hora de finalización / Voluntario / ID de evento. con los datos del rango de celdas A8: D12

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Temas principales:

  • Está utilizando un disparador simple, que no se puede usar para acceder a servicios que requieren autorización (consulte Disparadores simples > Restricciones ).
  • La función onEdit no verifica si la celda editada está en el rango correcto.
  • La función onEdit no recupera el evento del calendario, solo un valor undefined , porque la matriz e.source.getActiveSheet().getRange(8, 3, 1, 5).getValues() tiene solo un elemento.

Solución:

  • Instala tu disparador onEdit . Puede hacerlo manualmente, siguiendo estos pasos , o mediante programación, ejecutando installTrigger una vez (consulte el ejemplo de código a continuación).
  • Utilice el objeto de evento para verificar qué celda se editó antes de eliminar el evento correspondiente.
  • Llame a CalendarApp.getEventById(iCalId) para obtener el evento de calendario que desea recuperar.

Ejemplo de código:

 function installTrigger() { var ss = SpreadsheetApp.getActive(); ScriptApp.newTrigger("onEditTrigger") .forSpreadsheet(ss) .onEdit() .create(); } function onEditTrigger(e) { var range = e.range; var FIRST_ROW = 8; // First row to check var LAST_ROW = 12; // Last row to check var TITLE_COL = 3; // Column index where to check changes var ID_COL = 5; // Column index with event id var colIndex = range.getColumn(); var rowIndex = range.getRow(); if (colIndex === TITLE_COL && rowIndex >= FIRST_ROW && rowIndex <= LAST_ROW) { var sheet = range.getSheet(); var eventIdRange = sheet.getRange(rowIndex, ID_COL); var eventId = eventIdRange.getValue(); var event = CalendarApp.getEventById(eventId); event.deleteEvent(); eventIdRange.setValue(""); } }

Otros asuntos:

En la hoja de cálculo que proporcionó, los eventId están ubicados en la columna E, pero de acuerdo con scheduleShifts , están en la columna D (correspondiente a la Description en su hoja de cálculo). Te sugiero que modifiques tu función en consecuencia:

 function scheduleShifts(){ var spreadsheet = SpreadsheetApp.getActiveSheet(); var calendarId = spreadsheet.getRange("C4").getValue(); var eventCal = CalendarApp.getCalendarById(calendarId); var signups = spreadsheet.getRange("A8:E12").getValues(); for (let x = 0; x < signups.length; x++) { var shift = signups[x]; var startTime = shift[0]; var endTime = shift[1]; var volunteer = shift[2]; var description = shift[3]; var eventId = shift[4]; if (eventId == ""){ var newEvent = eventCal.createEvent(volunteer, startTime, endTime); var newEventId = newEvent.getId(); spreadsheet.getRange(8 + x, 5).setValue(newEventId); } } }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda