Leaning/유니티
[유니티] 메뉴생성 - 목표: 엑셀파일 변환
by ksw8596
2025. 1. 4.
using UnityEditor;
using UnityEngine;
using UnityEngine.Windows;
using System.IO;
//EditorWindow를 상속
public class TableDataTool : EditorWindow
{
private string selectedFilePath = "No file selected";
private string inputFilePath = "";
private string outputDirectory = "Data";
//유니티에 메뉴생성
[MenuItem("Tools/TableDataTool")]
//생성창 만들기
public static void ShowWindow()
{
GetWindow<TableDataTool>();
}
private void OnGUI()
{
GUILayout.Label("Excel to Csv Converter : ");
EditorGUILayout.LabelField("Input File Path", inputFilePath);
if(GUILayout.Button("File Select"))
{
FileOpen();
}
if(GUILayout.Button("Convert"))
{
if(string.IsNullOrEmpty(inputFilePath))
{
Debug.LogError("Input file path must be specified");
return;
}
ExcelToConverter.ConvertXlsmToCsv(inputFilePath, outputDirectory);
Debug.Log($"Conversion completed. File save to: Asset/{outputDirectory}");
}
}
//디렉토리 열기
public string FileOpen()
{
//xlsm, xlsx 파일을 읽을 수 있도록함
string path = EditorUtility.OpenFilePanel("Select a File", "", "xlsm;*.xlsx;");
// 파일을 잘 가져왔는지 검사하기위한 string값
string[] supportedExtensions = { ".xlsm", ".xlsx" };
if (!string.IsNullOrEmpty(path))
{
string fileExtension = System.IO.Path.GetExtension(path).ToLower();
if (System.Array.Exists(supportedExtensions, ext => ext == fileExtension))
{
selectedFilePath = path;
Debug.Log($"Selected file: {path}");
}
else
{
selectedFilePath = "Unsupported file type selected";
Debug.LogWarning("Unsupported file type selected.");
}
}
else
{
selectedFilePath = "No file selected";
Debug.Log("No file selected.");
}
return inputFilePath = path;
}
}
using System;
using System.IO;
using UnityEngine;
using UnityEngine.Rendering.LookDev;
namespace Tools
{
public class ExcelToCsvConverter
{
public static void ConvertXlsmToCsv(string inputFilePath, string outputFilePath)
{
try
{
if (!File.Exists(inputFilePath))
{
Debug.Log($"File not found : {inputFilePath}");
return;
}
if (!Directory.Exists(outputFilePath))
{
Directory.CreateDirectory(outputFilePath);
}
//파일을 열어준다.
using (FileStream file = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read))
{
//열렸는가를 체크하기위한 로그
Debug.Log($"File Open : {inputFilePath}");
}
}
catch (Exception ex)
{
Debug.LogError($"Error converting file : {ex.Message}");
}
}
}
}