유니티에서는 주로 csv 파일 형식을 많이 다룬다. 가볍기 때문인데, 만약 Excel의 강력한 기능들이 필요하다면, ExcelDataReader.dll을 사용해보자.
CsvReader 기능도 지원한다.
좋은 점
Excel 형식에 따른, 매서드 이름
.xlsx
=> CreateReader.csv
=> CreateCsvReader.xls
=> CreateBinaryReader var path = AssetDatabase.GetAssetPath(xlsx);
var streamer = new FileStream(path, FileMode.Open, FileAccess.Read);
using (var reader = ExcelReaderFactory.CreateReader(streamer))
{
// 모든 시트 로드
var tables = reader.AsDataSet().Tables;
for(var sheetIndex = 0 ; sheetIndex < tables.Count; sheetIndex ++)
{
var sheet = tables[sheetIndex];
//시트 이름 필터링 가능
Debug.Log($"Sheet[{sheetIndex}] Name: {sheet.TableName}");
for(var rowIndex = 0 ; rowIndex < sheet.Rows.Count; rowIndex ++)
{
// 행 가져오기
var slot = sheet.Rows[rowIndex];
for (var columnIndex = 0; columnIndex < slot.ItemArray.Length; columnIndex++)
{
var item = slot.ItemArray[columnIndex];
// 열 가져오기
Debug.Log($"slot[{rowIndex}][{columnIndex}] : {item}");
}
}
}
reader.Dispose();
reader.Close();
var path = AssetDatabase.GetAssetPath(csv);
// 한글 깨짐 현상 해결 가능
var config = new ExcelReaderConfiguration();
config.FallbackEncoding = Encoding.GetEncoding("ks_c_5601-1987");
var streamer = new FileStream(path, FileMode.Open, FileAccess.Read);
using (var reader = ExcelReaderFactory.CreateCsvReader(streamer, config))
{
// 항상 하나의 시트만 관리된다.
var sheet = reader.AsDataSet().Tables[0];
// 시트 이름
Debug.Log($"Sheet Name: {sheet.TableName}");
for (var rowIndex = 0; rowIndex < sheet.Rows.Count; rowIndex++)
{
// 행 가져오기
var slot = sheet.Rows[rowIndex];
for (var columnIndex = 0; columnIndex < slot.ItemArray.Length; columnIndex++)
{
// 열 가져오기
var item = slot.ItemArray[columnIndex];
Debug.Log($"slot[{rowIndex}][{columnIndex}] : {item}");
}
}
reader.Dispose();
reader.Close();