Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

290
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!