글을 적는 이유
툴 작업을 하다보니 DataTable 편집 작업해야하는 일이 있었다. DataTable을 수정, 저장, CSV로 Export하는 방법을 기억하기 위해 적는다.
작업 환경
UE4.26
UDataTable 활용법
비우기
UDataTable* dataTable;
dataTable->EmptyTable();
저장
AssetEditorToolKit.cpp
FAssetEditorToolkit::SaveAsset_Execute()
추가
UDataTable* dataTable;
FName rowName;
FTableRowBase tableRow;
dataTable->AddRow(rowName, tableRow);
삭제
UDataTable* dataTable;
FName rowName;
dataTable->RemoveRow(rowName);
CSV Export
void FAssetTypeActions_DataTable::ExecuteExportAsCSV(TArray< TWeakObjectPtr<UObject> > Objects)
{
IDesktopPlatform* DesktopPlatform = FDesktopPlatformModule::Get();
const void* ParentWindowWindowHandle = FSlateApplication::Get().FindBestParentWindowHandleForDialogs(nullptr);
for (auto ObjIt = Objects.CreateConstIterator(); ObjIt; ++ObjIt)
{
auto DataTable = Cast<UDataTable>((*ObjIt).Get());
if (DataTable)
{
const FText Title = FText::Format(LOCTEXT("DataTable_ExportCSVDialogTitle", "Export '{0}' as CSV..."), FText::FromString(*DataTable->GetName()));
const FString CurrentFilename = DataTable->AssetImportData->GetFirstFilename();
const FString FileTypes = TEXT("Data Table CSV (*.csv)|*.csv");
TArray<FString> OutFilenames;
DesktopPlatform->SaveFileDialog(
ParentWindowWindowHandle,
Title.ToString(),
(CurrentFilename.IsEmpty()) ? TEXT("") : FPaths::GetPath(CurrentFilename),
(CurrentFilename.IsEmpty()) ? TEXT("") : FPaths::GetBaseFilename(CurrentFilename) + TEXT(".csv"),
FileTypes,
EFileDialogFlags::None,
OutFilenames
);
if (OutFilenames.Num() > 0)
{
FFileHelper::SaveStringToFile(DataTable->GetTableAsCSV(), *OutFilenames[0]);
}
}
}
}
JSON Export
void FAssetTypeActions_DataTable::ExecuteExportAsJSON(TArray< TWeakObjectPtr<UObject> > Objects)
{
IDesktopPlatform* DesktopPlatform = FDesktopPlatformModule::Get();
const void* ParentWindowWindowHandle = FSlateApplication::Get().FindBestParentWindowHandleForDialogs(nullptr);
for (auto ObjIt = Objects.CreateConstIterator(); ObjIt; ++ObjIt)
{
auto DataTable = Cast<UDataTable>((*ObjIt).Get());
if (DataTable)
{
const FText Title = FText::Format(LOCTEXT("DataTable_ExportJSONDialogTitle", "Export '{0}' as JSON..."), FText::FromString(*DataTable->GetName()));
const FString CurrentFilename = DataTable->AssetImportData->GetFirstFilename();
const FString FileTypes = TEXT("Data Table JSON (*.json)|*.json");
TArray<FString> OutFilenames;
DesktopPlatform->SaveFileDialog(
ParentWindowWindowHandle,
Title.ToString(),
(CurrentFilename.IsEmpty()) ? TEXT("") : FPaths::GetPath(CurrentFilename),
(CurrentFilename.IsEmpty()) ? TEXT("") : FPaths::GetBaseFilename(CurrentFilename) + TEXT(".json"),
FileTypes,
EFileDialogFlags::None,
OutFilenames
);
if (OutFilenames.Num() > 0)
{
FFileHelper::SaveStringToFile(DataTable->GetTableAsJSON(EDataTableExportFlags::UseJsonObjectsForStructs), *OutFilenames[0]);
}
}
}
}
'UE4' 카테고리의 다른 글
[UE4][Editor] Asset 저장 (0) | 2022.07.25 |
---|---|
[UE4] Animation 덧붙이기 (0) | 2022.05.29 |
UE4 코드에서 MessageDialog 사용 (0) | 2022.04.18 |
UE4 아웃 라이너에서 Actor 선택하기 C++ (0) | 2022.04.12 |
UE4 Customized Property Layout 갱신 (0) | 2022.04.08 |