엑셀은 데이터를 직관적이고 편리하게 관리할 수 있게 해줍니다. 이러한 장점을 이용하여 유니티에서 엑셀 파일을 json으로 변환하여 엑셀 파일의 데이터를 이용할 수 있도록 함수를 구현하여 정리하였습니다.
📺 미리 보기
엑셀 파일을 읽어 그 데이터를 이용할 수 있습니다.
💬 서론
- 이 기능은 ExcelDataReader, ExcelDataReader.DataSet, Newtonsoft.Json 패키지를 사용합니다.
📖 구현 내용
using UnityEngine;
using System.Collections.Generic;
using System.IO;
using System.Data;
// Newtonsoft.Json과 ExcelDataReader 패키지가 필요합니다.
// nuget에서 다운로드 받아 사용하세요.
using ExcelDataReader;
using Newtonsoft.Json;
/// <summary>
/// 엑셀 파일을 Json으로 변환합니다.
/// </summary>
public static class ExcelToJsonConverter
{
public static string ConvertExcelToJson(string filePath)
{
// 엑셀 파일을 읽습니다.
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
IExcelDataReader reader;
if (Path.GetExtension(filePath).Equals(".xls"))
{
// Excel 97-2003 포맷
reader = ExcelReaderFactory.CreateBinaryReader(stream);
}
else if (Path.GetExtension(filePath).Equals(".xlsx"))
{
// Excel 2007 포맷
reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
}
else
{
Debug.LogError("지원하지 않는 포맷입니다. .xls과 .xlsx 파일만 지원합니다.");
return null;
}
// 엑셀 파일에서 데이터 읽기
DataSet dataSet = reader.AsDataSet();
reader.Close();
// 엑셀 파일을 JSON으로 변환
List<Dictionary<string, object>> jsonData = new List<Dictionary<string, object>>();
DataTable table = dataSet.Tables[0];
for (int i = 1; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
Dictionary<string, object> rowData = new Dictionary<string, object>();
for (int j = 0; j < table.Columns.Count; j++)
{
string key = table.Rows[0][j].ToString();
object value = row[j];
rowData[key] = value;
}
jsonData.Add(rowData);
}
// 리턴
return JsonConvert.SerializeObject(jsonData, Formatting.Indented);
}
}
✅ 사용
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
QuizManager quizManager = (QuizManager)target;
if (GUILayout.Button("Load Questions"))
{
List<QuestionData> questionDataList = JsonConvert.DeserializeObject<List<QuestionData>>(ExcelToJsonConverter.ConvertExcelToJson(Application.dataPath + "/Questions.xlsx"));
quizManager.quizQuestions = ConvertToQuestionList(questionDataList);
}
}
- 전역 Static 함수로 "ExcelToJsonConverter.ConvertExcelToJson" 함수를 호출하여 경로에 있는 엑셀 파일을 Json string으로 변환합니다.
- Json 파일은 JsonConvert를 이용하여 의도에 맞게 사용 가능합니다.
- 본 스크립트는 문제를 Excel에 저장하여 데이터를 불러오는 함수입니다.
🕹️ Unity Affiliate
- Unity Affiliate Program 파트너로서 아래의 배너를 통해 접속하신 경우 수수료를 받을 수 있습니다.
- 아래 배너의 에셋들은 '실시간 무료 에셋 랭킹'을 나타냅니다.
'unity tools & functions' 카테고리의 다른 글
[유니티] 에셋의 이름을 편리하게 변경 (0) | 2023.09.15 |
---|---|
[유니티] 중복 Enum ID 업데이트 툴 (0) | 2023.07.12 |
[유니티] 유니티 에디터 스크린샷 캡쳐 도구 (0) | 2023.06.28 |
[유니티] Hex를 RGB Color로 변환 (0) | 2023.06.27 |
[유니티] InputField Tab Navigation, Button Event (0) | 2023.06.22 |