算了,自己解决了,论坛人太少了。 
原因:源代码中UDataTableFunctionLibrary这几个函数包含在#if WITH_EDITOR ... #endif 中,只能在编辑器下调用,重写FillDataTableFromCsvString,使它可以在打包后运行。 
供参考: 
 
- bool ATableRowSetting::GetDynamicTableFromCsvFile(UDataTable* DataTable, const FString& FilePath, const FString& FileName, TArray<FTableRowStruct>& TableRowArray)
 
 - {
 
 -         if (!DataTable)
 
 -         {
 
 -                 UE_LOG(LogCsvParser, Warning, TEXT("Can't fill an invalid DataTable."));
 
 -                 return false;
 
 -         }
 
  
-         // 获得Csv文件绝对路径
 
 -         FString _AbsoluteFilePath = FilePath + "\" + FileName;
 
 -         // 暂存csv 字符串
 
 -         FString _CsvString;
 
 -         if (FPlatformFileManager::Get().GetPlatformFile().FileExists(*_AbsoluteFilePath))
 
 -         {
 
 -                 // Supports all combination of ANSI/Unicode files and platforms.
 
 -                 FFileHelper::LoadFileToString(_CsvString, *_AbsoluteFilePath);
 
 -         }
 
 -         else
 
 -         {
 
 -                 UE_LOG(LogCsvParser, Warning, TEXT("Could not find file %s"), *_AbsoluteFilePath);
 
 -                 return false;
 
 -         }
 
  
-         if (_CsvString.Len() == 0)
 
 -         {
 
 -                 // csv文件为空
 
 -                 DataTable->EmptyTable();
 
 -                 return false;
 
 -         }
 
 -         else
 
 -         {
 
 -                 TArray<FString> Errors = DataTable->CreateTableFromCSVString(_CsvString);
 
 -                 if (Errors.Num())
 
 -                 {
 
 -                         // 创建表失败
 
 -                         for (const FString& Error : Errors)
 
 -                         {
 
 -                                 UE_LOG(LogCsvParser, Warning, TEXT("%s"), *Error);
 
 -                         }
 
 -                         return false;
 
 -                 }
 
 -         }
 
  
-         // 定义变量保存Table的所有RowName
 
 -         TArray<FName> TableRowNames;
 
 -         // csv文件填充Table成功,获取Table的RowName
 
 -         UDataTableFunctionLibrary::GetDataTableRowNames(DataTable, TableRowNames);
 
 -         // Table每一行数据
 
 -         FTableRowStruct* _RowDataPtr;
 
 -         for (FName BaseRowName : TableRowNames)
 
 -         {
 
 -                 // 遍历每一个RowName的数据
 
 -                 _RowDataPtr = DataTable->FindRow<FTableRowStruct>(BaseRowName, TEXT("LookupRow"), true);
 
 -                 TableRowArray.Add(*_RowDataPtr);
 
 -         }
 
 -         return true;
 
  
- }
 
  复制代码 
 
 |