Skip to content

CSV import & export

TruePPM reads and writes CSV so your data can move between a spreadsheet and a schedule. This page tells you exactly what each CSV surface does, what it does not do, and which file to use when CSV is the wrong tool.

“Round-trips” means: export it, import it back, and get the same thing.

SurfaceExportImportRound-trips?
RisksYesYesYes — the two are counterparts
TasksYesShips in 0.4No — see below
LabelsNoYesNo — import-only; there is no label export to round-trip from
Sprints, resources, calendars, dependenciesNoNo

The task CSV export is a snapshot of what’s on your screen. Three of its eight columns are values TruePPM calculated rather than values you entered:

ColumnWhere it comes from
WBSyour outline
Nameyou
Startcalculated — the earliest the scheduler can start this task
Finishcalculated — the earliest it can finish
Duration (days)you
Progress (%)you
Statusyou
Criticalcalculated — whether it’s on the critical path

The task import that ships in 0.4 reads Start and Finish as dates you are committing to. So if you export tasks to CSV and import that file back, you get new tasks whose committed dates are yesterday’s calculated output — not a copy of your project.

Use the export to hand someone a status table. Use a JSON seed to move the project.

Making the two into genuine counterparts is planned — see issue #2401.

The Risk Register’s Export CSV and Import CSV actions are symmetric: a file exported from one project imports cleanly into another. See Risk register for the workflow.

Columns: ID, Title, Status, Category, Response, P, I, Severity, Owner, Mitigation Due Date, Trigger, Contingency, Description.

Only Title is required. On import:

  • ID and Severity are ignored — IDs are assigned per project, and severity is always calculated from probability × impact.
  • Owner is matched against the project’s own members by email, username, or ID. Someone who isn’t a member of the project can’t be assigned by a file; that row imports with the risk unassigned and a warning.
  • An unrecognized status, category, or response imports the row anyway and warns.
  • A probability or impact outside 1–5 skips that row — a stray value there usually means the columns were mapped wrong, and guessing would be worse.

Limits: 2 MB, 500 rows. A larger file is rejected outright rather than partially imported, so a truncated import can never look like a successful one.

Task CSV export is available today from the Table view’s CSV toolbar action. It exports the rows currently shown — your filters and sort apply.

Task CSV and Excel import ships in 0.4. It will accept .csv and .xlsx, auto-detect your column headers, show you the mapping and the first ten rows to confirm before anything is written, and report problems by line number.

Planned limits: 10 MB, 5 000 rows.

Headers it will recognize, case-insensitively:

Your column becomesHeaders accepted
Task nameName, Task, Title, Task Name, Summary
DurationDuration, Days, Effort
Start dateStart, Begin, Start Date
Finish dateFinish, End, Due, Due Date
Percent complete% Complete, Percent Complete, Done, Progress
AssigneeAssignee, Owner, Resource, Assigned To
PredecessorPredecessor, Predecessors, Depends On, Blocked By
LabelsLabels, Label, Tags, Tag, Category, Component, Stream, Workstream
HierarchyWBS, Phase, Level, Outline Level — or indentation in the name column

Labels and Predecessor each accept several source columns, and the values are unioned — a sheet with both Tags and Component, or with Predecessor 1 and Predecessor 2, keeps all of them. Every other field takes exactly one column. See Columns that can appear more than once.

Excel files are read as one sheet of values: the first sheet only, no formulas evaluated. If your workbook has other sheets, the import warns and ignores them. TruePPM never writes .xlsx.

Every CSV TruePPM writes or reads follows the same rules (RFC 4180):

SeparatorComma
EncodingUTF-8. A byte-order mark is accepted on import (Excel adds one)
Line endingsCRLF written; either accepted
QuotingFields containing a comma, quote, or newline are wrapped in "; embedded quotes are doubled
First rowColumn headers. Their order doesn’t matter on import — only their names
DatesYYYY-MM-DD
Blank rowsSkipped
Rows starting with #Skipped — use them for comments
Unrecognized columnsIgnored, with a warning. They never fail the import

The full normative definition is the data interchange specification.

Two things will bite you, and neither is specific to TruePPM.

If your regional settings use a semicolon as the list separator (common across much of Europe), Excel will open a comma-delimited file as one column. Fix it without changing the file:

  1. Open Excel, then Data → From Text/CSV (rather than double-clicking the file).
  2. Choose Comma as the delimiter.

TruePPM always writes comma-delimited files on purpose. Adapting the separator to each machine would mean the same file meant different things on different computers — which is exactly what disqualifies CSV as an authoritative format.

Opening a CSV in Excel and saving it can silently alter the contents: leading zeros disappear, long numeric strings become scientific notation, and anything that looks like a date is rewritten in your machine’s local format.

TruePPM’s importers tolerate the common damage — including dates written back as Jun 9, 2026. They can’t tolerate all of it. If an import produces unexpected values, re-export from the source tool and import the file without opening it in Excel first.

An import reports two kinds of problem, both by line number (the header is line 1):

  • Errors skip that one row. The rest of the file still imports.
  • Warnings import the row with a substituted value — an unrecognized status becomes the default, an unreadable date is left blank, an unmatched owner is left unassigned.

A partial import is a result, not a failure. For spreadsheet data it’s the normal outcome. You get the rows that landed plus a list of what didn’t and why, so you can fix those lines and re-import just them.

Whole-file problems — an unreadable file, a missing required column, too many rows — reject the upload and write nothing. You never end up with half an import.

  • Importing tasks requires Project Manager or above.
  • Importing risks requires Member or above.
  • Exporting requires the same permission as the equivalent JSON export of the same data. A CSV export isn’t a lower-privilege action just because the file is smaller.

Collected in one place, because these are properties of the format rather than things still to be built:

  1. One flat list per file. No nesting, no cross-references between entity types, no version marker.
  2. No identity, so no updates. Import always creates. There is no CSV path to modify a task or risk that already exists.
  3. No dependencies on export, and only simple predecessors on import — no lag, and not the four dependency types the scheduler supports.
  4. No comments, attachments, time entries, or history.
  5. Excel reformats data, so a file that has been opened and re-saved is no longer guaranteed to match what TruePPM wrote.
  6. Not a backup. No version, no manifest, no integrity check, and no way to represent most of a project.

For anything on that list, use JSON export or an export bundle.