Quick answer: The CSV first column must be exactly Name (or RowName), and every subsequent column must match a UPROPERTY in your row struct exactly, including case. Mismatches make Unreal skip the column or fail the import. Re-export from your spreadsheet with proper headers and re-import.
Here is how to fix Unreal DataTable CSV imports that produce empty or partially populated tables. You author a spreadsheet with item names, prices, and rarities; export as CSV; import to Unreal; and only the row keys appear, with all column data missing. Or the import fails outright with header mismatch errors. The CSV format is strict about how columns map to struct UPROPERTYs.
The Symptom
Importing a CSV to a DataTable shows the dialog, you confirm the row struct, and the result has rows but missing field data. The Output Log shows messages like Couldn't find property 'price' in struct FItemRow. Or the import succeeds but every row uses default values.
What Causes This
First column header wrong. Unreal expects Name in the first cell of the first row. Some templates use ---, RowName, or omit it entirely.
Case mismatch on data columns. CSV header price does not match UPROPERTY Price. Unreal’s match is case-sensitive.
Whitespace. A trailing space in a header (Price ) does not match Price.
Excel quoting. Strings with commas need quotes around them. Excel does this automatically; some text editors do not.
UTF-8 BOM byte. A byte-order mark at the start of the file invalidates the first header.
The Fix
Step 1: Define your row struct cleanly.
USTRUCT(BlueprintType)
struct FItemRow : public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadOnly)
FString DisplayName;
UPROPERTY(EditAnywhere, BlueprintReadOnly)
int32 Price;
UPROPERTY(EditAnywhere, BlueprintReadOnly)
FName Rarity;
};
Step 2: Write CSV with matching headers.
Name,DisplayName,Price,Rarity
sword_iron,"Iron Sword",100,Common
sword_steel,"Steel Sword",300,Uncommon
sword_legendary,"Legendary Blade",5000,Legendary
First column header is Name. Subsequent headers match UPROPERTY names exactly. String values with potential commas are quoted.
Step 3: Save without BOM.
# If exporting from Excel, choose "CSV (Comma delimited)" not "CSV UTF-8"
# Or remove the BOM with sed
sed -i '1s/^\xEF\xBB\xBF//' items.csv
Step 4: Import via the editor. Drag the CSV into the Content Browser. In the dialog, choose your row struct (FItemRow). Confirm. Open the resulting DataTable; you should see all rows with all columns populated.
Step 5: Reimport when the source changes. Right-click the DataTable, choose Reimport. If you moved the source file, choose Reimport With New Source File instead.
JSON As An Alternative
If your data has nested structs or arrays, JSON imports cleaner than CSV:
[
{
"Name": "sword_iron",
"DisplayName": "Iron Sword",
"Price": 100,
"Rarity": "Common",
"Effects": ["Slash", "Bleed"]
}
]
Same import dialog, picks JSON automatically by extension. Field names case-sensitive but no need to worry about CSV escaping rules.
Validation Workflow
Always import to a temp DataTable first, inspect, and only then replace your production table. Unreal’s reimport overwrites without warning, so a bad CSV can destroy hours of designer work.
“Name in column A. UPROPERTY-exact headers everywhere else. Quote strings with commas. The import succeeds.”
Related Issues
For DataTable row lookup failures, see DataTable Row Not Found. For data asset cook issues, see Data Asset Soft Ref Null.
Headers match UPROPERTY case-sensitive. No BOM. Quote tricky strings. Import sticks.