ExcelDataReader 사용하기.

Changhoony·2022년 12월 16일
0

Unity

목록 보기
1/4

들어가며..

유니티에서는 주로 csv 파일 형식을 많이 다룬다. 가볍기 때문인데, 만약 Excel의 강력한 기능들이 필요하다면, ExcelDataReader.dll을 사용해보자.
CsvReader 기능도 지원한다.


  • 좋은 점

    1. 함수나 기능 사용 외에 특징으로 Excel Reader 는 sheet들을 모두 로드 가능하므로, Csv에 비해 편리하게 작업할 수 있다.
    2. Csv나 엑셀 모두 별도의 설정 없이 ',' 사용이 가능하다.
    3. 엑셀버전 로드시 한글 깨짐 현상이 없다. Csv로드시 설정 값만 잡아주면 한글 깨짐 현상이 사라진다.
  • Excel 형식에 따른, 매서드 이름

    1. .xlsx => CreateReader
    2. .csv => CreateCsvReader
    3. .xls => CreateBinaryReader

예제

  1. ExcelReader (한글 깨짐 현상 없음)
         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();
  1. CsvReader (한글 깨짐 현상 해결법 포함)
        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();
profile
Unity 개발

0개의 댓글