The workbook can be a standard *xlsx or an *xlsm.


Row indentation and grouping do not impact import.


Contains a 'Project' worksheet


Formulas: These are not safe on all cells, especially date values. If formulas are used, some values may be imported incorrectly/not at all. Not all formulas will fail, but many do. The more complex the formula, the more likely to fail import.


Number formatting: It matters, mainly for dates.


Range name: Cell A2 must be defined as 'FieldExportTarget' as a sheet-specific named range. Warning: the row at this range is NOT read; do NOT include data in this row.


Data to the right of the comment column is ignored.


Row 1 (Header) expected cell contents; however, the labels do NOT matter; they are ignored during import.

Column A: <blank>

Column B: Field (* required)

Column C: *

Column D: Value

Column E: Unit/Curr

Column F: Comment


All other rows (starting after the range name row).

Column B: <valid and unique CPH field name>

Column C: <ignored>

Column D: <the value>

Column E: <unit or currency code when appropriate>

Column F: <comments>


Duplicate field names (column B) are NOT allowed.


Rows without a field name value (column B) are ignored.


Gaps, as in blank rows, are acceptable between project field rows.


Contains an 'Item' worksheet


Formulas: They mainly work, but when unknown failures occur, try a test import after copying and using the "paste special -> values only" for the entire Item worksheet to test around formula-related errors. As with the project sheet, the more complex the formula, the more likely the import is to ignore the cell.


Number formatting: It appears to be ignored, but I expect it remains an issue with dates if included as item fields.


Range name: Cell A1 must be defined as 'ItemExportTarget' as a sheet-specific named range. Data should appear after row 1.


Data to the right of the last column value in row 1 is NOT ignored. All columns with data should have a label in row 1 except for unit or currency code companion columns.


All row 1 headers should be valid CPH field names, but CPH will attempt to import all data on the worksheet - using the row 1 label as the field name. Best practices require any cell content should have a row 1 header unless it is companion data for a quantity, currency, or cost field. If content exists in a cell that does not have a header and is not in a companion column, the import will fail.


Quantity fields should have a unit column immediately to the right of their value column. The row 1 cell for that unit column should be blank. If the unit column has a value in row 1, it will import as a separate field and the quantity's unit is blank.


Currency and cost fields can optionally have a currency code column to the immediate right of the field value column. The row 1 cell for that currency code column should be blank. If the currency code column has a value in row 1, then it will import as a separate field and the value's currency code defaults to the project's currency code.


Duplicate row 1 column header names are NOT allowed.


When the 'RowLevel' technique is used, it should be the first column and NOT utilize a formula to calculate its cell value. Note that when using 'RowLevel', a value of 0 means to import; all other values force an ignore. Ideally, every row should have a value in the 'RowLevel' column; blanks are considered a non-zero value and are skipped, but that appears inconsistent.


Gaps, as in blank rows, are acceptable between item data rows.


Warning: rows without a description value are NOT imported. However, unless utilizing the 'RowLevel' technique, if there is a description in the row, CPH will attempt to import that row, even if the data in the other columns is invalid.