示例#1
0
        public override Task DoWork(CodeFileBuilder pCodeFileBuilder, ISheetConnector pConnector, TypeData[] arrSheetData, Action <string> OnPrintWorkProcess)
        {
            //TypeDataList pTypeDataList = JsonSaveManager.LoadData<TypeDataList>($"{GetRelative_To_AbsolutePath(strExportPath)}/{nameof(TypeDataList)}.json", OnPrintWorkProcess);
            //if (pTypeDataList == null)
            //    pTypeDataList = new TypeDataList(pConnector.strSheetID);

            // 로컬 데이터에 있는 TypeData와 현재 TypeData가 일치하지 않음.
            // 무조건 현재 TypeData기준으로 작업하기
            TypeDataList pTypeDataList = new TypeDataList(pConnector.strSheetID);

            pTypeDataList.listTypeData = arrSheetData.ToList();

            List <Task> listTask = new List <Task>();

            foreach (var pSheet in arrSheetData)
            {
                if (pSheet.eType == ESheetType.Enum)
                {
                    continue;
                }

                listTask.Add(ProcessJson(pConnector, OnPrintWorkProcess, pSheet, pTypeDataList));
            }

            Task.WaitAll(listTask.ToArray(), new TimeSpan(3000));

            return(Task.Run(() =>
            {
                pTypeDataList.listTypeData.Sort((x, y) => x.iOrder.CompareTo(y.iOrder));
                JsonSaveManager.SaveData(pTypeDataList, $"{GetRelative_To_AbsolutePath(strExportPath)}/{nameof(TypeDataList)}.json");
            }));
        }
示例#2
0
        private static Task Parsing_OnCode(TypeData pSheetData, ISheetConnector pConnector, CodeFileBuilder pCodeFileBuilder, List <CommandLineArg> listCommandLine)
        {
            var pCodeType = pCodeFileBuilder.AddCodeType(pSheetData.strFileName, pSheetData.eType);
            var mapFieldData_ConvertStringToEnum              = pSheetData.listFieldData.Where((pFieldData) => pFieldData.bConvertStringToEnum).ToDictionary(((pFieldData) => pFieldData.strFieldName));
            var listFieldData_DeleteThisField_OnCode          = pSheetData.listFieldData.Where((pFieldData) => pFieldData.bDeleteThisField_InCode).Select((pFieldData) => pFieldData.strFieldName);
            Dictionary <int, CodeTypeDeclaration> mapEnumType = new Dictionary <int, CodeTypeDeclaration>();


            int iDefinedTypeRow = -1;

            pSheetData.listEnumName.Clear();
            return(pSheetData.ParsingSheet_UseTask(pConnector,
                                                   (listRow, strText, iRow, iColumn) =>
            {
                // 변수 선언 형식인경우
                if (strText.Contains(":"))
                {
                    if (iDefinedTypeRow == -1)
                    {
                        iDefinedTypeRow = iRow;
                    }

                    if (iDefinedTypeRow != iRow)
                    {
                        return;
                    }

                    string[] arrText = strText.Split(':');
                    string strFieldName = arrText[0];

                    if (mapFieldData_ConvertStringToEnum.ContainsKey(strFieldName))
                    {
                        FieldTypeData pFieldData = mapFieldData_ConvertStringToEnum[strFieldName];
                        mapEnumType.Add(iColumn, pCodeFileBuilder.AddCodeType(pFieldData.strEnumName, ESheetType.Enum));

                        if (pSheetData.listEnumName.Contains(pFieldData.strEnumName) == false)
                        {
                            pSheetData.listEnumName.Add(pFieldData.strEnumName);
                        }
                    }

                    // 삭제되는 코드인 경우
                    if (listFieldData_DeleteThisField_OnCode.Contains(strFieldName))
                    {
                        return;
                    }

                    pCodeType.AddField(new FieldTypeData(strFieldName, arrText[1]));
                    return;
                }

                // 이넘 Column인 경우 이넘 생성
                if (mapEnumType.ContainsKey(iColumn))
                {
                    mapEnumType[iColumn].AddEnumField(new EnumFieldData(strText));
                    return;
                }
            }).ContinueWith((p) => Execute_CommandLine(pCodeType, listCommandLine)));
        }
示例#3
0
        public static void DoCheck_IsValid_Table(this TypeData pSheetData, ISheetConnector pConnector, Action <string> OnError)
        {
            bool bIsEnum = pSheetData.eType == ESheetType.Enum;

            pSheetData.ParsingSheet(pConnector,
                                    (listRow, strText, iRow, iColumn) =>
            {
                if (bIsEnum)
                {
                    Dictionary <int, EEnumHeaderType> mapEnumType = new Dictionary <int, EEnumHeaderType>();

                    if (Enum.TryParse(strText, out EEnumHeaderType eType))
                    {
                        // mapEnumType.Add(,eType)
                        if (eType == EEnumHeaderType.EnumType)
                        {
                            for (int i = iColumn; i < listRow.Count; i++)
                            {
                                string strTextOtherColumn = (string)listRow[i];
                                if (Enum.TryParse(strTextOtherColumn, out eType) == false)
                                {
                                    OnError?.Invoke($"테이블 유효성 체크 - 이넘 파싱 에러");
                                    return;
                                }

                                if (mapEnumType.ContainsKey(iColumn) == false)
                                {
                                    mapEnumType.Add(iColumn, eType);
                                }
                            }
                        }

                        return;
                    }

                    if (mapEnumType.ContainsKey(iColumn) == false)
                    {
                        return;
                    }

                    switch (mapEnumType[iColumn])
                    {
                    case EEnumHeaderType.EnumType:
                    case EEnumHeaderType.EnumValue:
                        if (string.IsNullOrEmpty(strText))
                        {
                            OnError?.Invoke($"테이블 유효성 체크 - 이넘 파싱 에러");
                            return;
                        }
                        break;
                    }
                }
                else
                {
                }
            });
        }
        public override Task DoWork(CodeFileBuilder pCodeFileBuilder, ISheetConnector pConnector, TypeData[] arrSheetData, Action <string> OnPrintWorkProcess)
        {
            List <Task> listTask = new List <Task>();

            foreach (var pSheet in arrSheetData)
            {
                listTask.Add(Task.Run(() =>
                {
                    StringBuilder pStrBuilder = new StringBuilder();
                    StreamWriter pFileWriter  = new StreamWriter($"{GetRelative_To_AbsolutePath(strExportPath)}/{pSheet.strFileName.Trim()}.csv");

                    int iLastRowIndex = -1;
                    return(pSheet.ParsingSheet_UseTask(pConnector,
                                                       (listRow, strText, iRowIndex, iColumnIndex) =>
                    {
                        if (iLastRowIndex == -1)
                        {
                            iLastRowIndex = iRowIndex;
                        }

                        if (strText.Contains(':'))
                        {
                            string[] arrText = strText.Split(':');
                            strText = arrText[0];
                        }

                        if (iLastRowIndex != iRowIndex)
                        {
                            iLastRowIndex = iRowIndex;

                            pStrBuilder.Remove(pStrBuilder.Length - 1, 1);
                            pFileWriter.WriteLine(pStrBuilder.ToString());
                            pFileWriter.Flush();

                            pStrBuilder.Clear();
                        }

                        pStrBuilder.Append(strText);
                        pStrBuilder.Append(",");
                    }).ContinueWith((p) =>
                    {
                        pStrBuilder.Remove(pStrBuilder.Length - 1, 1);
                        pFileWriter.WriteLine(pStrBuilder.ToString());
                        pFileWriter.Flush();

                        pFileWriter.Close();
                        pFileWriter.Dispose();
                    }));
                }));
            }
            // Task.WaitAll(listTask.ToArray());

            return(Task.WhenAll(listTask));
        }
示例#5
0
        public static void ParsingSheet(this TypeData pSheet, ISheetConnector pConnector, delOnParsingText OnParsingTextLine)
        {
            IList <IList <Object> > pData = pConnector.ISheetConnector_GetSheetData(pSheet.strSheetName);

            if (pData == null)
            {
                return;
            }

            _ParsingSheet(OnParsingTextLine, pData);
        }
示例#6
0
        public static Task DoWork(this TypeData pSheetData, ISheetConnector pConnector, CodeFileBuilder pCodeFileBuilder, Action <string> OnError)
        {
            List <CommandLineArg> listCommandLine = Parsing_CommandLine(pSheetData.strCommandLine, OnError);

            switch (pSheetData.eType)
            {
            case ESheetType.Class:
            case ESheetType.Struct:
                return(Parsing_OnCode(pSheetData, pConnector, pCodeFileBuilder, listCommandLine));

            case ESheetType.Enum:
                return(Parsing_OnEnum(pSheetData, pConnector, pCodeFileBuilder));

            case ESheetType.Global:
                return(Parsing_OnGlobal(pSheetData, pConnector, pCodeFileBuilder));

            default: return(Task.CompletedTask);
            }
        }
示例#7
0
 public SheetData(ISheetConnector pConnector, string strSheetName, string strSheetID)
 {
     this.pConnector   = pConnector;
     this.strSheetName = strSheetName;
     this.strSheetID   = strSheetID;
 }
示例#8
0
        public override Task DoWork(CodeFileBuilder pCodeFileBuilder, ISheetConnector pConnector, TypeData[] arrSheetData, Action <string> OnPrintWorkState)
        {
            CodeNamespace pNameSpace = new CodeNamespace();

            List <CodeNamespaceImport> listDefaultUsing = new List <CodeNamespaceImport>();

            listDefaultUsing.Add(new CodeNamespaceImport("UnityEngine"));

            List <CommandLineArg> listCommandLine = Parsing_CommandLine(strCommandLine, null);

            for (int i = 0; i < listCommandLine.Count; i++)
            {
                ECommandLine eCommandLine = (ECommandLine)Enum.Parse(typeof(ECommandLine), listCommandLine[i].strArgName);
                switch (eCommandLine)
                {
                case ECommandLine.addusing:
                    listDefaultUsing.Add(new CodeNamespaceImport(listCommandLine[i].strArgValue));
                    break;

                case ECommandLine.useusing:
                    pNameSpace.Name = listCommandLine[i].strArgValue;
                    break;
                }
            }
            CodeNamespaceImport[] arrDefaultUsing = listDefaultUsing.ToArray();
            pNameSpace.Imports.AddRange(arrDefaultUsing);

            CodeTypeDeclarationCollection arrTypes = pCodeFileBuilder.GetCodeTypeDeclarationCollection();
            List <CodeTypeDeclaration>    listType = new List <CodeTypeDeclaration>();

            foreach (CodeTypeDeclaration pType in arrTypes)
            {
                listType.Add(pType);
            }


            HashSet <CodeTypeDeclaration>     setExecutedType = new HashSet <CodeTypeDeclaration>();
            IEnumerable <CodeTypeDeclaration> listUnitySO     = listType.Where(p => string.IsNullOrEmpty(p.Name) == false && p.IsClass);

            foreach (CodeTypeDeclaration pType in listUnitySO)
            {
                TypeData pSaveData = arrSheetData.FirstOrDefault((pSaveDataSheet) => pSaveDataSheet.strFileName == pType.Name);
                if (pSaveData == null)
                {
                    continue;
                }

                Create_SO(pCodeFileBuilder, pNameSpace, pType, pSaveData);

                CodeTypeDeclaration[] arrEnumTypes = listType.Where(p => pSaveData.listEnumName.Contains(p.Name)).ToArray();
                foreach (var pEnumType in arrEnumTypes)
                {
                    setExecutedType.Add(pEnumType);
                }

                if (pSaveData.eType == ESheetType.Global)
                {
                    Create_GlobalSOContainer(pCodeFileBuilder, pNameSpace, arrDefaultUsing, pType, arrEnumTypes, pSaveData);
                }
                else
                {
                    Create_SOContainer(pCodeFileBuilder, pNameSpace, arrDefaultUsing, pType, arrEnumTypes, pSaveData);
                }

                OnPrintWorkState?.Invoke($"UnitySO - Working SO {pType.Name}");
                setExecutedType.Add(pType);
            }

            // Others
            pNameSpace.Types.Clear();
            IEnumerable <CodeTypeDeclaration> listOthers = listType.Where(p => string.IsNullOrEmpty(p.Name) == false && setExecutedType.Contains(p) == false);

            foreach (CodeTypeDeclaration pType in listOthers)
            {
                OnPrintWorkState?.Invoke($"UnitySO - Working Others {pType.Name}");
                pNameSpace.Types.Add(pType);
                setExecutedType.Add(pType);
            }

            if (pNameSpace.Types.Count != 0)
            {
                pCodeFileBuilder.Generate_CSharpCode(pNameSpace, $"{GetRelative_To_AbsolutePath(strExportPath)}/Others");
            }

            return(Task.CompletedTask);
        }
示例#9
0
 public static Task ParsingSheet_UseTask(this TypeData pSheet, ISheetConnector pConnector, delOnParsingText OnParsingTextLine)
 {
     return(pConnector.ISheetConnector_GetSheetData_Async(pSheet.strSheetName).
            ContinueWith(p => _ParsingSheet(OnParsingTextLine, p.Result)));
 }
示例#10
0
        private static Task Parsing_OnEnum(TypeData pSheetData, ISheetConnector pConnector, CodeFileBuilder pCodeFileBuilder)
        {
            Dictionary <int, EEnumHeaderType>        mapEnumType  = new Dictionary <int, EEnumHeaderType>();
            Dictionary <string, CodeTypeDeclaration> mapEnumValue = new Dictionary <string, CodeTypeDeclaration>();

            return(pSheetData.ParsingSheet_UseTask(pConnector,
                                                   (listRow, strText, iRow, iColumn) =>
            {
                EEnumHeaderType eType = EEnumHeaderType.EnumNone;
                if (Enum.TryParse(strText, out eType))
                {
                    if (eType == EEnumHeaderType.EnumType)
                    {
                        if (mapEnumType.ContainsKey(iColumn) == false)
                        {
                            mapEnumType.Add(iColumn, eType);
                        }

                        for (int i = iColumn; i < listRow.Count; i++)
                        {
                            string strTextOtherColumn = (string)listRow[i];
                            if (Enum.TryParse(strTextOtherColumn, out eType))
                            {
                                if (mapEnumType.ContainsKey(i) == false)
                                {
                                    mapEnumType.Add(i, eType);
                                }
                            }
                        }
                    }

                    return;
                }

                if (mapEnumType.TryGetValue(iColumn, out eType) == false)
                {
                    return;
                }

                if (eType != EEnumHeaderType.EnumType)
                {
                    return;
                }

                if (mapEnumValue.ContainsKey(strText) == false)
                {
                    mapEnumValue.Add(strText, pCodeFileBuilder.AddCodeType(strText, ESheetType.Enum));
                }

                EnumFieldData pFieldData = new EnumFieldData();
                for (int i = iColumn; i < listRow.Count; i++)
                {
                    if (mapEnumType.TryGetValue(i, out eType))
                    {
                        string strNextText = (string)listRow[i];
                        switch (eType)
                        {
                        case EEnumHeaderType.EnumValue:
                            pFieldData.strValue = strNextText;
                            break;

                        case EEnumHeaderType.NumberValue: pFieldData.iNumber = int.Parse(strNextText); break;

                        case EEnumHeaderType.Comment: pFieldData.strComment = strNextText; break;
                        }
                    }
                }

                if (string.IsNullOrEmpty(pFieldData.strValue))
                {
                    throw new Exception($"이넘인데 값이 없습니다 - 타입 : {mapEnumValue[strText].Name}");
                }

                mapEnumValue[strText].AddEnumField(pFieldData);
            }));
        }
示例#11
0
        private static Task Parsing_OnGlobal(TypeData pSheetData, ISheetConnector pConnector, CodeFileBuilder pCodeFileBuilder)
        {
            var pCodeType_Class = pCodeFileBuilder.AddCodeType(pSheetData.strFileName, pSheetData.eType);

            Dictionary <int, EGlobalColumnType>      mapGlobalColumnType = new Dictionary <int, EGlobalColumnType>();
            Dictionary <string, CodeTypeDeclaration> mapEnumFieldType    = new Dictionary <string, CodeTypeDeclaration>();
            HashSet <string> setGlobalTable_ByType = new HashSet <string>();

            string strKeyFieldName      = "";
            string strTypeFieldName     = "";
            int    iColumnIndex_Type    = -1;
            int    iColumnIndex_Comment = -1;

            return(pSheetData.ParsingSheet_UseTask(pConnector,
                                                   (listRow, strText, iRow, iColumn) =>
            {
                // 변수 선언 형식인경우
                if (strText.Contains(":"))
                {
                    string[] arrText = strText.Split(':');
                    string strFieldName = arrText[0];
                    string strFieldName_Lower = strFieldName.ToLower();

                    for (int i = 0; i < (int)EGlobalColumnType.MAX; i++)
                    {
                        EGlobalColumnType eCurrentColumnType = (EGlobalColumnType)i;
                        if (strFieldName_Lower.Contains(eCurrentColumnType.ToString().ToLower()))
                        {
                            mapGlobalColumnType.Add(iColumn, eCurrentColumnType);

                            switch (eCurrentColumnType)
                            {
                            case EGlobalColumnType.Key:
                                {
                                    FieldTypeData pFieldData = pSheetData.listFieldData.FirstOrDefault(p => p.strFieldName == strFieldName);
                                    if (pFieldData != null)
                                    {
                                        pFieldData.bDeleteThisField_InCode = true;
                                    }

                                    strKeyFieldName = strFieldName;
                                }
                                break;

                            case EGlobalColumnType.Comment:
                                {
                                    FieldTypeData pFieldData = pSheetData.listFieldData.FirstOrDefault(p => p.strFieldName == strFieldName);
                                    if (pFieldData != null)
                                    {
                                        pFieldData.bDeleteThisField_InCode = true;
                                    }
                                    iColumnIndex_Comment = iColumn;
                                }
                                break;

                            case EGlobalColumnType.Type:
                                {
                                    iColumnIndex_Type = iColumn;
                                    strTypeFieldName = strFieldName;
                                    pCodeType_Class.AddField(new FieldTypeData(strFieldName, arrText[1]));

                                    FieldTypeData pFieldData_Type = pSheetData.listFieldData.FirstOrDefault(p => p.strFieldName == strFieldName);
                                    if (pFieldData_Type == null)
                                    {
                                        pSheetData.listFieldData.Add(new FieldTypeData(strFieldName, arrText[1]));
                                    }
                                }
                                break;


                            default:
                                pCodeType_Class.AddField(new FieldTypeData(strFieldName, arrText[1]));
                                break;
                            }

                            return;
                        }
                    }
                }

                // 변수 선언이 아니라 값을 파싱하면 일단 타입부터 확인한다
                if (mapGlobalColumnType.TryGetValue(iColumn, out var eColumnType) == false)
                {
                    return;
                }

                switch (eColumnType)
                {
                case EGlobalColumnType.Key:

                    string strTypeName = (string)listRow[iColumnIndex_Type];
                    string strEnumTypeName = const_GlobalKey_EnumName + "_" + strTypeName;
                    string strEnumFieldName = const_GlobalKey_FieldName + "_" + strTypeName;
                    if (mapEnumFieldType.TryGetValue(strEnumTypeName, out CodeTypeDeclaration pEnumTypeDeclaration) == false)
                    {
                        pEnumTypeDeclaration = AddEnumType(pSheetData, pCodeFileBuilder, strEnumTypeName);
                        mapEnumFieldType.Add(strEnumTypeName, pEnumTypeDeclaration);
                    }


                    FieldTypeData pFieldData_Enum = pSheetData.listFieldData.FirstOrDefault(p => p.strFieldName == strEnumFieldName);
                    if (pFieldData_Enum == null)
                    {
                        pFieldData_Enum = new FieldTypeData(strEnumFieldName, strEnumTypeName);
                        pFieldData_Enum.strDependencyFieldName = strKeyFieldName;
                        pFieldData_Enum.bIsVirtualField = true;
                        pSheetData.listFieldData.Add(pFieldData_Enum);
                    }


                    string strComment = "";
                    if (iColumnIndex_Comment != -1 && iColumnIndex_Comment < listRow.Count)
                    {
                        strComment = (string)listRow[iColumnIndex_Comment];
                    }

                    if (string.IsNullOrEmpty(strComment))
                    {
                        pEnumTypeDeclaration.AddEnumField(new EnumFieldData(strText));
                    }
                    else
                    {
                        pEnumTypeDeclaration.AddEnumField(new EnumFieldData(strText, strComment));
                    }

                    break;

                case EGlobalColumnType.Type:

                    if (setGlobalTable_ByType.Contains(strText))
                    {
                        return;
                    }
                    setGlobalTable_ByType.Add(strText);

                    string strFieldType = (string)listRow[iColumnIndex_Type];
                    FieldTypeData pFieldData = pSheetData.listFieldData.FirstOrDefault(p => p.strFieldName == strTypeFieldName && p.strFieldType == strFieldType);
                    if (pFieldData == null)
                    {
                        pFieldData = new FieldTypeData(strTypeFieldName, strFieldType);
                        pSheetData.listFieldData.Add(pFieldData);
                    }

                    pFieldData.bIsTemp = true;
                    pFieldData.bDeleteThisField_InCode = true;
                    pFieldData.bIsVirtualField = strFieldType != "string";
                    pFieldData.bIsKeyField = true;
                    pFieldData.bIsOverlapKey = true;

                    break;
                }
            }));
        }
 public override Task DoWork(CodeFileBuilder pCodeFileBuilder, ISheetConnector pConnector, TypeData[] arrSheetData, Action <string> OnPrintWorkProcess)
 {
     return(Task.Run(() => pCodeFileBuilder.Generate_CSharpCode($"{GetRelative_To_AbsolutePath(strPath)}/{strFileName}")));
 }
示例#13
0
 public abstract Task DoWork(CodeFileBuilder pCodeFileBuilder, ISheetConnector pConnector, TypeData[] arrSheetData, Action <string> OnPrintWorkState);
示例#14
0
        private Task ProcessJson(ISheetConnector pConnector, Action <string> OnPrintWorkProcess, TypeData pSheet,
                                 TypeDataList pTypeDataList)
        {
            JObject pJson_Instance = new JObject();
            JArray  pArray         = new JArray();

            Dictionary <string, FieldTypeData> mapFieldData  = pSheet.listFieldData.Where(p => p.bIsVirtualField == false).ToDictionary(p => p.strFieldName);
            Dictionary <int, string>           mapMemberName = new Dictionary <int, string>();
            int iColumnStartIndex = -1;

            return(pSheet.ParsingSheet_UseTask(pConnector,
                                               ((listRow, strText, iRowIndex, iColumnIndex) =>
            {
                if (strText.Contains(':'))     // 변수 타입 파싱
                {
                    if (mapMemberName.ContainsKey(iColumnIndex))
                    {
                        return;
                    }

                    string[] arrText = strText.Split(':');
                    mapMemberName.Add(iColumnIndex, arrText[0]);
                    // mapMemberType.Add(iColumnIndex, arrText[1]);

                    if (iColumnStartIndex == -1)
                    {
                        iColumnStartIndex = iColumnIndex;
                    }

                    return;
                }

                if (iColumnIndex != iColumnStartIndex)
                {
                    return;
                }

                JObject pObject = new JObject();

                // 실제 변수값
                for (int i = iColumnIndex; i < listRow.Count; i++)
                {
                    if (mapMemberName.ContainsKey(i) == false)
                    {
                        continue;
                    }

                    if (mapFieldData.TryGetValue(mapMemberName[i], out FieldTypeData pFieldTypeData) == false)
                    {
                        OnPrintWorkProcess?.Invoke($"{pSheet.strSheetName}({pSheet.strSheetID}) - mapFieldData.ContainsKey({mapMemberName[i]}) Fail");
                        continue;
                    }

                    string strFieldName = pFieldTypeData.strFieldName;
                    string strValue = (string)listRow[i];
                    pObject.Add(strFieldName, strValue);
                }

                pArray.Add(pObject);
            })).ContinueWith((pTask) =>
            {
                pJson_Instance.Add("array", pArray);

                string strFileName = $"{pSheet.strFileName}.json";
                JsonSaveManager.SaveData(pJson_Instance, $"{GetRelative_To_AbsolutePath(strExportPath)}/{strFileName}");

                var pAlreadyExist = pTypeDataList.listTypeData.FirstOrDefault(p => p.strSheetID == pSheet.strSheetID);
                if (pAlreadyExist != null)
                {
                    pTypeDataList.listTypeData.Remove(pAlreadyExist);
                }

                pTypeDataList.listTypeData.Add(pSheet);
            }));
        }
        private void OnFinishConnect(ISheetConnector pConnector, Exception pException_OnError)
        {
            if (pException_OnError != null)
            {
                WriteConsole("연결 실패 " + pException_OnError);
                return;
            }

            if (_mapSaveData.ContainsKey(pConnector.strSheetID))
            {
                pSpreadSheet_CurrentConnected       = _mapSaveData[pConnector.strSheetID];
                pSpreadSheet_CurrentConnected.eType = pConnector.eSheetType;
                List <TypeData> listSavedTable = pSpreadSheet_CurrentConnected.listTable;

                int iOrder = 0;
                foreach (KeyValuePair <string, SheetData> pSheet in pConnector.mapWorkSheetData_Key_Is_SheetID)
                {
                    TypeData pTypeDataFind = listSavedTable.FirstOrDefault(x => (x.strSheetID == pSheet.Key));
                    if (pTypeDataFind == null)
                    {
                        listSavedTable.Add(new TypeData(pSheet.Value.strSheetID, pSheet.Value.strSheetName, iOrder));
                    }
                    else
                    {
                        // 이미 저장되있는 Sheet의 경우
                        // 웹에 있는 SheetName과 로컬의 SheetName이 다를 수 있기 때문에 갱신
                        pTypeDataFind.strSheetName = pSheet.Value.strSheetName;
                        pTypeDataFind.iOrder       = iOrder;
                    }

                    iOrder++;
                }
            }
            else
            {
                pSpreadSheet_CurrentConnected = new SaveData_SpreadSheet(pConnector.strSheetID, pConnector.eSheetType);
                _mapSaveData[pSpreadSheet_CurrentConnected.strSheetID] = pSpreadSheet_CurrentConnected;

                int iOrder = 0;
                pSpreadSheet_CurrentConnected.listTable.Clear();
                foreach (KeyValuePair <string, SheetData> pSheet in pConnector.mapWorkSheetData_Key_Is_SheetID)
                {
                    pSpreadSheet_CurrentConnected.listTable.Add(new TypeData(pSheet.Value.strSheetID, pSheet.Value.strSheetName, iOrder++));
                }

                SaveDataManager.SaveSheet(pSpreadSheet_CurrentConnected);

                WriteConsole("새 파일을 만들었습니다.");
            }

            checkedListBox_SheetList.Items.Clear();
            List <TypeData> listSheetSaved = pSpreadSheet_CurrentConnected.listTable;

            listSheetSaved.Sort((x, y) => x.iOrder.CompareTo(y.iOrder));

            TypeData[] arrSheetDelete = listSheetSaved.Where((pSheet) =>
                                                             pConnector.mapWorkSheetData_Key_Is_SheetID.Values.Any(p => p.strSheetID == pSheet.strSheetID) == false).ToArray();

            if (arrSheetDelete.Length > 0)
            {
                for (int i = 0; i < arrSheetDelete.Length; i++)
                {
                    listSheetSaved.Remove(arrSheetDelete[i]);
                }

                AutoSaveAsync_CurrentSheet();
            }
            ClearFieldData(listSheetSaved);

            for (int i = 0; i < listSheetSaved.Count; i++)
            {
                checkedListBox_SheetList.Items.Add(listSheetSaved[i], listSheetSaved[i].bEnable);
            }

            checkedListBox_WorkList.Items.Clear();
            List <WorkBase> listWorkBase = pSpreadSheet_CurrentConnected.listSaveWork;

            listWorkBase.Sort((x, y) => x.iWorkOrder.CompareTo(y.iWorkOrder));
            for (int i = 0; i < listWorkBase.Count; i++)
            {
                checkedListBox_WorkList.Items.Add(listWorkBase[i], listWorkBase[i].bEnable);
            }

            SetState(EState.IsConnected);
            WriteConsole("연결 성공");
            _bIsConnecting = false;
        }