Excel Row to Planner Task Creator
Reads rows from an Excel table and creates Planner tasks for each row, with assignment, due dates, and priority mapping.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
This flow bulk-imports tasks from an Excel Online table into Microsoft Planner. It reads every row from a designated table, iterates through them, and creates a Planner task for each — copying over title, due date, assignee, description, and priority. After a row is processed, the flow marks it as imported so subsequent runs can skip it. The demo build ships with a manual button trigger but can be swapped to an automatic 'When a row is added' trigger for hands-off operation.
Use Case
Project managers and team leads frequently receive task lists in spreadsheets — from stakeholders, intake forms, planning workshops, or other tools — and need to get them into Planner without copy-pasting each one. This flow turns an Excel table into the source of truth for task creation: fill in the rows, run the flow, and watch the Planner board populate. The Excel sheet stays a familiar editing surface for non-Planner users while the actual task tracking happens in Planner.
The flow is ideal for teams that:
- Project managers who collect task requests in Excel before triaging them into Planner
- Teams onboarding new work from intake spreadsheets or planning workshops
- Operations leads who need a bulk-import path into Planner without manual data entry
- Anyone migrating task lists from another tool into Planner via an Excel export
Flow Architecture
Manually trigger a flow
Manual button triggerStarts the import on demand. Can be swapped for 'When a row is added' on the Excel table to make task creation automatic as rows are appended.
List rows in the Excel table
List rows present in a table (Excel Online)Pulls every row from the configured Excel table on SharePoint or OneDrive. The file is the task-import spreadsheet and the table holds the rows to import.
Loop through each row and create a Planner task
Apply to eachFor each row returned by the List rows action, the flow creates a Planner task and then updates its details. Inside the loop: 'Create a task' (Planner) sets Plan Id, Bucket Id (mapped from the Excel Category column), Title from items('Apply_to_each')?['TaskName'], Due Date from items('Apply_to_each')?['DueDate'], and Assigned to from items('Apply_to_each')?['AssignedTo']; then 'Update task details' (Planner) writes the Description from items('Apply_to_each')?['Description'] and maps the Excel priority column to Planner priority (1=Urgent, 3=Important, 5=Medium, 9=Low).
Mark the Excel row as processed
Update a row (Excel Online)Sets the 'Imported' column on the source row to 'Yes' so the next run can filter it out and avoid creating duplicate tasks.
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Excel Online (Business) | shared_excelonlinebusiness | GetItems (List rows present in a table) PatchItem (Update a row) |
| Microsoft Planner | shared_planner | CreateTaskV3 (Create a task) UpdateTaskDetailsV2 (Update task details) |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Switch to automatic creation on new rows
- Replace the manual button trigger with 'When a row is added' on the Excel table so tasks are created as soon as someone appends a row — no need to remember to run the flow.
- Skip already-imported rows
- Add an Odata filter or a Condition inside the loop that checks the 'Imported' column and skips rows where it equals 'Yes'. Combined with the Mark-as-processed step, this makes the flow safely re-runnable without duplicating tasks.
- Map category names to bucket IDs with a Switch
- Add a Switch control on the Excel Category column to look up the matching Planner Bucket Id. This keeps the Excel sheet human-readable (category names) while still routing each task to the correct Planner bucket.
- Promote Plan Id, Bucket Ids, and file identifiers to environment variables
- Move the Planner Plan Id, default Bucket Id, drive/site, file id, and table name to environment variables so the same flow definition can be deployed against different tenants and Planner plans without editing the actions.
- Add error handling for bad rows
- Configure 'Run after' on the Create-task action to catch failures (invalid dates, missing assignees, unknown email addresses) and either log them to a separate Excel sheet or send the row to a review queue, so a single bad row doesn't stop the rest of the import.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Task title from Excel row
Pulls the TaskName column out of the current Excel row inside the Apply-to-each loop and feeds it to the Planner Create-task action.
EXPR.02Due date from Excel row
Reads the DueDate column for the current row. Excel must store this as an ISO date or a value Planner accepts as a date-time.
EXPR.03Assignee from Excel row
Reads the AssignedTo column for the current row. The value must be a UPN or AAD user id that Planner can resolve.
EXPR.04Description from Excel row
Reads the Description column and passes it to the Planner Update-task-details action so the task body matches what was in the spreadsheet.
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.