Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

301
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda