¿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.
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
Escenario | Opción recomendada | Ventajas | Limitaciones |
---|---|---|---|
Puedes usar Power Automate | Flujo manual que recorra tareas y actualice due date | Sin código, repetible, control de criterios | Requiere permisos y conectores permitidos por TI |
Power Automate bloqueado por TI | Solicitud a TI para script único con Microsoft Graph o PowerShell | Rápido y exacto para lotes grandes | Depende del área técnica, requiere credenciales y consentimiento |
Necesitas un asistente visual | Herramienta de terceros aprobada por tu organización | Interfaz amigable, funciones extra | Coste, cumplimiento y seguridad a validar |
No tienes automatización ni soporte TI | Edición individual con filtros y vistas | Sin dependencias | Lento 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.
Columna | Descripción | Ejemplo |
---|---|---|
Task ID | Identificador único de la tarea | 01b1d7f9-0d0a-4f66-9e3d-… |
NuevaFecha | Fecha objetivo en formato ISO 8601 | 2025-08-15T17:00:00Z |
Bucket | Opcional, para aplicar reglas por contenedor | “QA” |
Regla | Opcional, por ejemplo “+7 días” | PLUS7 |
Estructura sugerida del flujo
- Disparador manual (Botón o instantáneo). Permite ejecutar bajo demanda.
- Entrada de datos:
- Opción A: Excel Online (Business) → “Obtener filas” desde una tabla con
Task ID
yNuevaFecha
. - Opción B: Planner → “Listar tareas de un plan” o “Listar tareas de un bucket” y luego calcular la nueva fecha con expresiones.
- Opción A: Excel Online (Business) → “Obtener filas” desde una tabla con
- Filtrado (opcional): “Filtro de matriz” para excluir completadas o para un bucket específico.
- 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).
- Si usas Excel, toma directamente
- Bucle “Aplicar a cada”: por cada tarea:
- Planner → Actualizar tarea: mapea Task Id y establece Due date con el valor calculado.
- 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:
- Crea una tabla con columnas
TaskID
,NuevaFecha
,Bucket
. - Usa “Obtener filas” en Power Automate para leerla.
- Si
NuevaFecha
viene vacía, aplica la regla:addDays(utcNow(), 14)
. - 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 modificardueDateTime
. - 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
- Listar tareas del plan o de un bucket con
GET /planner/plans/{planId}/tasks
oGET /planner/buckets/{bucketId}/tasks
. - Para cada tarea, leer su
id
,dueDateTime
y@odata.etag
. - 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" }
- Cabecera:
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
- Crear flujo “Instant cloud flow”.
- Introducir parámetros (opcional): PlanId, BucketName, DiasDesplazamiento (número).
- Acción “Listar tareas del plan”.
- Acción “Filtro de matriz” →
@and(not(equals(item()?['percentComplete'], 100)), equals(item()?['bucketName'], parameters('BucketName')))
(ajusta a tu caso). - Acción “ComposeNuevaFecha” →
addDays(utcNow(), parameters('DiasDesplazamiento'))
. - “Aplicar a cada” sobre la lista filtrada.
- En el bucle: “Actualizar tarea (Planner)” → asigna Task Id y Due date = salida de ComposeNuevaFecha.
- Acción final: “Agregar una fila a una tabla” (Excel) con el registro de cambios.
Escenarios prácticos y fórmulas listas para pegar
Escenario | Expresión | Notas |
---|---|---|
Desplazar todas +7 días | addDays(utcNow(), 7) | Rápido, homogéneo |
Próximo lunes a las 09:00 UTC | concat(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 UTC | concat(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, +7 | if(empty(items('Applytoeach')?['dueDateTime']), addDays(utcNow(),14), addDays(items('Applytoeach')?['dueDateTime'],7)) | Regla condicional |
Convertir a zona horaria de Madrid | convertTimeZone(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.