엑셀은 데이터를 직관적이고 편리하게 관리할 수 있게 해줍니다. 이러한 장점을 이용하여 유니티에서 엑셀 파일을 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 파트너로서 아래의 배너를 통해 접속하신 경우 수수료를 받을 수 있습니다.
  • 아래 배너의 에셋들은 '실시간 무료 에셋 랭킹'을 나타냅니다.
bonnate