Planner en Teams: cambiar la fecha de vencimiento de múltiples tareas (edición masiva sin función nativa)

¿Necesitas cambiar la fecha de vencimiento de decenas de tareas en Planner dentro de Teams y ya no encuentras una opción de edición masiva? Hoy no existe función nativa. Aquí tienes formas probadas para hacerlo con Power Automate, Microsoft Graph/PowerShell o, como último recurso, apps de terceros.

Índice

Resumen de la pregunta

¿Se puede cambiar la fecha de vencimiento de varias tareas a la vez en Microsoft Teams Planner? Durante un tiempo se comentó la posibilidad de hacerlo, pero en el estado actual de Planner/Tasks en Teams no hay edición masiva nativa de la fecha de vencimiento. Aun así, existen rutas viables para lograrlo sin abrir una por una.

Estado actual de la función

  • Planner (también visible como Tareas de Planner y To Do en Teams) no incluye un formulario o acción de “editar varias tareas a la vez”.
  • La opción Exportar a Excel está disponible para llevarte los datos del plan, pero no existe una importación nativa que respete cambios en fechas.
  • La vía más directa y controlada para actualizar en bloque es la automatización (Power Automate, Microsoft Graph o PowerShell).

Ruta rápida de decisión

EscenarioOpción recomendadaVentajasLimitaciones
Puedes usar Power AutomateFlujo manual que recorra tareas y actualice due dateSin código, repetible, control de criteriosRequiere permisos y conectores permitidos por TI
Power Automate bloqueado por TISolicitud a TI para script único con Microsoft Graph o PowerShellRápido y exacto para lotes grandesDepende del área técnica, requiere credenciales y consentimiento
Necesitas un asistente visualHerramienta de terceros aprobada por tu organizaciónInterfaz amigable, funciones extraCoste, cumplimiento y seguridad a validar
No tienes automatización ni soporte TIEdición individual con filtros y vistasSin dependenciasLento para gran volumen

Opción recomendada: Power Automate

Si tu organización permite Power Automate, es la vía más equilibrada entre rapidez, control y seguridad. La idea es leer una lista de tareas (por ejemplo, de un Excel o del propio conector de Planner), aplicar una regla de negocio y actualizar el campo Due date (dueDateTime a nivel de API) en bucle.

Preparación de datos

Si las tareas ya existen, necesitarás su ID y el Plan ID o, si vas a filtrar por contenedor, el Bucket ID. Puedes obtenerlos con el conector de Planner o exportando el plan a Excel para localizarlos de forma cómoda.

ColumnaDescripciónEjemplo
Task IDIdentificador único de la tarea01b1d7f9-0d0a-4f66-9e3d-…
NuevaFechaFecha objetivo en formato ISO 86012025-08-15T17:00:00Z
BucketOpcional, para aplicar reglas por contenedor“QA”
ReglaOpcional, por ejemplo “+7 días”PLUS7

Estructura sugerida del flujo

  1. Disparador manual (Botón o instantáneo). Permite ejecutar bajo demanda.
  2. Entrada de datos:
    • Opción A: Excel Online (Business) → “Obtener filas” desde una tabla con Task ID y NuevaFecha.
    • Opción B: Planner → “Listar tareas de un plan” o “Listar tareas de un bucket” y luego calcular la nueva fecha con expresiones.
  3. Filtrado (opcional): “Filtro de matriz” para excluir completadas o para un bucket específico.
  4. Cálculo de fecha:
    • Si usas Excel, toma directamente NuevaFecha.
    • Si usas reglas: crea una acción Compose con la expresión adecuada (ver ejemplos abajo).
  5. Bucle “Aplicar a cada”: por cada tarea:
    • Planner → Actualizar tarea: mapea Task Id y establece Due date con el valor calculado.
  6. Confirmación (opcional): envía un resumen o escribe un registro en una tabla/log.

Expresiones útiles en Power Automate

Sumar días a la fecha actual (por ejemplo, +7):

addDays(utcNow(), 7)

Sumar días a la fecha de vencimiento existente (si no es nula; en caso contrario, usar hoy):

addDays(coalesce(items('Applytoeach')?['dueDateTime'], utcNow()), 7)

Fijar al próximo lunes (lunes = 1 si domingo=0):

addDays(utcNow(), mod(1 - dayOfWeek(utcNow()) + 7, 7))

Ajustar a fin de mes a las 17:00 UTC:

concat(
  formatDateTime(addDays(startOfMonth(addMonths(utcNow(),1)), -1), 'yyyy-MM-dd'),
  'T17:00:00Z'
)

Convertir zona horaria (ej. de UTC a “Romance Standard Time”):

convertTimeZone(outputs('ComposeFechaUTC'),'UTC','Romance Standard Time','yyyy-MM-ddTHH:mm:ssZ')

Evitar actualizar tareas completadas (probar estado 100):

@and(not(equals(items('Applytoeach')?['percentComplete'], 100)), not(empty(items('Applytoeach')?['id'])))

Buenas prácticas del flujo

  • Formato ISO: usa yyyy-MM-ddTHH:mm:ssZ para máxima compatibilidad.
  • Prueba en un subconjunto: filtra por un bucket o etiqueta y valida resultado antes del lote completo.
  • Control de concurrencia: en el bucle, limita el grado de paralelismo para evitar saturación.
  • Registro: guarda en una tabla las tareas actualizadas (ID, título, fecha anterior, fecha nueva, timestamp).
  • Desactiva el flujo tras la ejecución si su uso es puntual, para evitar disparos accidentales.

Uso de Excel como apoyo

Exportar un plan a Excel no reimporta cambios, pero es útil para:

  • Construir la tabla Task ID y NuevaFecha con precisión.
  • Diseñar reglas (por ejemplo, tareas del bucket “Revisión” con “+14 días”).
  • Auditar los cambios y conservar un respaldo.

Ejemplo de mapeo con Excel:

  1. Crea una tabla con columnas TaskID, NuevaFecha, Bucket.
  2. Usa “Obtener filas” en Power Automate para leerla.
  3. Si NuevaFecha viene vacía, aplica la regla: addDays(utcNow(), 14).
  4. Actualiza en Planner con “Actualizar tarea”.

Alternativa con Microsoft Graph y PowerShell

Cuando Power Automate no está disponible o necesitas un control aún más fino, una ejecución única con Microsoft Graph o PowerShell resuelve el problema. Es ideal si TI puede correr el script con permisos adecuados.

Conceptos clave

  • Endpoint de tareas: /planner/tasks/{taskId} (método PATCH) para modificar dueDateTime.
  • Concurrencia: Graph exige la cabecera If-Match con el eTag actual de la tarea para aceptar el cambio.
  • Permisos: se requieren permisos de escritura sobre Planner (delegados o de aplicación, según el modelo elegido) y acceso al grupo del plan.

Ejemplo de flujo de trabajo con Graph

  1. Listar tareas del plan o de un bucket con GET /planner/plans/{planId}/tasks o GET /planner/buckets/{bucketId}/tasks.
  2. Para cada tarea, leer su id, dueDateTime y @odata.etag.
  3. Calcular la nueva fecha (por ejemplo, +7 días) y ejecutar PATCH /planner/tasks/{taskId} con:
    • Cabecera: If-Match: <eTag>
    • Cuerpo: { "dueDateTime": "2025-08-15T17:00:00Z" }

Ejemplo en PowerShell (orientativo)

# Requiere módulos de Microsoft Graph y permisos adecuados
Conéctate con un ámbito que permita escribir en Planner
Connect-MgGraph -Scopes "Tasks.ReadWrite","Group.Read.All"

\$planId   = "PLAN-ID-AQUI"
\$bucketId = "BUCKET-ID-OPCIONAL"
\$dias     = 14

Obtener tareas (por plan o por bucket)

\$tareas = Invoke-MgGraphRequest -Method GET -Uri "/planner/plans/\$planId/tasks" | Select-Object -ExpandProperty value

foreach (\$t in \$tareas) {
if (\$t.percentComplete -ne 100) {
\$etag  = \$t.'@odata.etag'
\$fecha = \[DateTime]::UtcNow\.AddDays(\$dias).ToString("yyyy-MM-ddTHH\:mm\:ssZ")```
    $body = @{ dueDateTime = $fecha } | ConvertTo-Json
    Invoke-MgGraphRequest -Method PATCH `
        -Uri "/planner/tasks/$($t.id)" `
        -Headers @{ "If-Match" = $etag } `
        -Body $body `
        -ContentType "application/json"
}
```
} 

Consejos:

  • Introduce pausas si actualizas miles de tareas para evitar límites de solicitud.
  • Registra cambios (antes/después) por cumplimiento y trazabilidad.
  • Haz una prueba en un plan de laboratorio antes del plan real.

Herramientas de terceros

Existen soluciones que prometen edición masiva de Planner. Antes de usarlas, verifica:

  • Seguridad y cumplimiento: método de autenticación, almacenamiento de datos, certificaciones.
  • Modelo de permisos: principio de menor privilegio y revocación sencilla.
  • Coste total: licencias, soporte, bloqueo por TI.

Si tu organización las aprueba, pueden ofrecer una interfaz cómoda para operaciones en lote. Si no, vuelve a Power Automate o al soporte TI con Graph/PowerShell.

Estrategias cuando solo queda la edición individual

  • Filtra por bucket, etiqueta o asignado para reducir el conjunto y aplicar una lógica consistente.
  • Usa vistas agrupadas (por “Vencimiento” o “Asignado”) para seguir un orden y minimizar errores.
  • Ordena por fecha y actualiza de más urgente a menos urgente.
  • Comunica el cambio a los asignados si el desplazamiento de fechas es significativo.

Notas y limitaciones importantes

  • No hay importación nativa desde Excel a Planner. El Excel sirve como fuente de datos para tu flujo o script.
  • Notificaciones: mover la fecha puede disparar recordatorios; coordina con el equipo.
  • Zona horaria: Planner almacena en UTC; define una hora objetivo coherente para todos.
  • Tareas completadas: decide si las excluyes; suele ser lo más lógico para evitar ruido histórico.
  • Etiquetas y prioridades: no cambian por mover la fecha; si necesitas ajustes, inclúyelos en el mismo flujo.

Plantilla de flujo paso a paso

  1. Crear flujo “Instant cloud flow”.
  2. Introducir parámetros (opcional): PlanId, BucketName, DiasDesplazamiento (número).
  3. Acción “Listar tareas del plan”.
  4. Acción “Filtro de matriz” → @and(not(equals(item()?['percentComplete'], 100)), equals(item()?['bucketName'], parameters('BucketName'))) (ajusta a tu caso).
  5. Acción “ComposeNuevaFecha” → addDays(utcNow(), parameters('DiasDesplazamiento')).
  6. “Aplicar a cada” sobre la lista filtrada.
  7. En el bucle: “Actualizar tarea (Planner)” → asigna Task Id y Due date = salida de ComposeNuevaFecha.
  8. Acción final: “Agregar una fila a una tabla” (Excel) con el registro de cambios.

Escenarios prácticos y fórmulas listas para pegar

EscenarioExpresiónNotas
Desplazar todas +7 díasaddDays(utcNow(), 7)Rápido, homogéneo
Próximo lunes a las 09:00 UTCconcat(formatDateTime(addDays(utcNow(), mod(1 - dayOfWeek(utcNow()) + 7, 7)), 'yyyy-MM-dd'), 'T09:00:00Z')Evita vencimientos en fin de semana
Fin de mes a las 17:00 UTCconcat(formatDateTime(addDays(startOfMonth(addMonths(utcNow(),1)),-1),'yyyy-MM-dd'),'T17:00:00Z')Útil para cierres
Si la tarea no tenía fecha → hoy +14; si tenía, +7if(empty(items('Applytoeach')?['dueDateTime']), addDays(utcNow(),14), addDays(items('Applytoeach')?['dueDateTime'],7))Regla condicional
Convertir a zona horaria de MadridconvertTimeZone(outputs('ComposeUTC'),'UTC','Romance Standard Time','yyyy-MM-ddTHH:mm:ssZ')Consistencia regional

Verificación y auditoría

  • Plan piloto: aplica el flujo a 5–10 tareas y valida en Planner.
  • Bitácora: guarda ID de tarea, fecha anterior, fecha nueva y resultado (éxito/error).
  • Reversión: conserva un Excel de respaldo con las fechas originales para un eventual rollback.

Errores frecuentes y cómo evitarlos

  • Formato de fecha inválido: usa siempre ISO 8601 con “Z”.
  • Falta de permisos: verifica acceso al plan y al grupo; en Power Automate, que la conexión esté vigente.
  • Exceso de paralelismo: reduce la concurrencia si ves errores intermitentes.
  • No capturar completadas: filtra percentComplete = 100 si no quieres tocarlas.
  • Zonas horarias: define una hora estándar (por ejemplo, 17:00 UTC) para evitar sorpresas al convertir.

Preguntas frecuentes

¿Por qué no hay un botón de “editar en masa”?
Planner prioriza la simplicidad de la interfaz. La edición en lote está cubierta mediante automatización o APIs, que ofrecen más control y auditoría.

¿Mover fechas afecta recordatorios?
Sí, puede ajustar recordatorios e indicadores de vencimiento. Comunícalo a los asignados si el cambio es grande.

¿Puedo hacerlo por etiquetas o prioridades?
Sí. Filtra las tareas por etiqueta o prioridad en el flujo y aplica la regla de fecha solo a ese subconjunto.

¿Es posible que futuras actualizaciones añadan edición masiva?
Podría suceder. Mientras no exista, las rutas de automatización y scripts son el estándar de facto.

Checklist de implementación rápida

  • Definir criterio: “todas del bucket X +7 días” o “fijar al próximo lunes”.
  • Elegir método: Power Automate (preferido) o Graph/PowerShell.
  • Probar con 5 tareas y validar en Planner.
  • Ejecutar en lote con registros de auditoría.
  • Comunicar a los asignados y revisar notificaciones.

Conclusión

Aunque Planner en Teams no ofrece edición masiva nativa de fechas de vencimiento, tienes soluciones eficaces: Power Automate para un enfoque sin código y repetible; Microsoft Graph/PowerShell para una ejecución técnica puntual; o herramientas de terceros aprobadas si necesitas una interfaz amigable. Si ninguna automatización está disponible, recurre a filtros y vistas para agilizar la edición individual. Con las expresiones y plantillas anteriores, podrás ajustar fechas en bloque con control, trazabilidad y mínimo riesgo.

Índice