| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934 | using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;using Janus.Windows.GridEX.Export;using Janus.Windows.GridEX;using System.IO;using System.Drawing;using System.Data.OleDb;using System.Data.SqlClient;using System.Data;using System.Collections;namespace IControls_FireManager{    // 엑셀 관련 함수는 여기 클래스에서 전담한다    public static class _Excel    {        // 엑셀 파일 저장용 다이얼로그          public static SaveFileDialog SaveFileDialog_Xls = null;        public static GridEXExporter GridEXExporter_Xls = null;        // Export 전용 폰트        public static Font Export_Font = new System.Drawing.Font("굴림", 9F);        // 디버깅 용도        public static int Debug_Row = 0;        public static int Debug_Col = 0;        public static string Debug_SheetName = null;        public static string Debug_EtcMessage = null;        // Export (다이얼로그 창 없이 바로 생성)                public static EXCEL_DOC_TYPE Export_File_Check(string FileFullPath)        {            // Export 전용 Com 생성            GridEXExporter_Xls = new GridEXExporter();            string Ext = FileFullPath.Substring(FileFullPath.LastIndexOf(".") + 1, FileFullPath.Length - FileFullPath.LastIndexOf(".") - 1);            Ext = Ext.ToLower();            if (Ext.Equals("xls"))            {                return EXCEL_DOC_TYPE.Xls;            }            else if (Ext.Equals("xlsx"))            {                return EXCEL_DOC_TYPE.Xlsx;            }            else            {                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.FailFormatInform, 0);                return EXCEL_DOC_TYPE.Not;            }        }        // Export                public static void Export(GridEX Gridex, string FileFullPath, string Sheetname, string Caption)        {            // Export 전용 Com 생성            GridEXExporter_Xls = new GridEXExporter();            // 파일 경로             string filefullpath = null;            ///            /// 파일명이 없다는 것은 다이얼로그 창으로로 직접 파일명을 지정하겠다는 의미이다            ///            if (FileFullPath == null)            {                // 다이얼로그 생성                SaveFileDialog_Xls = new SaveFileDialog();                // 확장자 넣기                SaveFileDialog_Xls.Filter = "(*.xls)|*.xls|(*.xml)|*.xml";                // 파일 세이브 다이얼로그                if (SaveFileDialog_Xls.ShowDialog() == DialogResult.OK)                    filefullpath = SaveFileDialog_Xls.FileName;            }            else            {                filefullpath = FileFullPath;            }            ///            /// 파일 포맷이 정확한지 알아본다            ///             if (filefullpath == null || filefullpath.Length == 0)                return;            else if (Export_File_Check(filefullpath) == EXCEL_DOC_TYPE.Not)                return;            ///            /// 사전 작업            ///             // 원본 폰트 저장            Font OriginalFont = Gridex.Font;            // 파일 읽기            FileStream gFile = new FileStream(filefullpath, FileMode.Create, FileAccess.ReadWrite);            ///            /// 엑셀파일 전용 모드 변경            ///            if (Caption != null)            {                Gridex.RootTable.TableHeader = Janus.Windows.GridEX.InheritableBoolean.True;                Gridex.RootTable.Caption = Caption;            }            Gridex.Font = Export_Font;            ///            /// 파일 속성 지정            ///             GridEXExporter_Xls.GridEX = Gridex;            GridEXExporter_Xls.SheetName = Sheetname;            GridEXExporter_Xls.Export(gFile);            ///            /// 엑셀파일 전용 모드 해제            ///            if (Caption != null)            {                Gridex.RootTable.TableHeader = Janus.Windows.GridEX.InheritableBoolean.False;            }            Gridex.RootTable.Caption = null;            Gridex.Font = OriginalFont;        }        // 엑셀 커넥션 스트링        public static string ConnectionString(string FileFullPath)        {            string result = null;            switch (Export_File_Check(FileFullPath))            {                case EXCEL_DOC_TYPE.Xls:                    result = @"Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + FileFullPath + ";Extended Properties='Excel 8.0;HDR=No;IMEX=1';Persist Security Info=False";                    break;                case EXCEL_DOC_TYPE.Xlsx:                    result = @"Provider=Microsoft.ACE.OLEDB.12.0;Data source=" + FileFullPath + ";Extended Properties='Excel 12.0;HDR=No;IMEX=1';Persist Security Info=False";                    break;            }            return result;        }        // 테스트          public static bool OpenTest(string FileFullPath)        {            try            {                OleDbConnection Connection = new OleDbConnection(ConnectionString(FileFullPath));                Connection.Open();                return true;            }            catch (Exception e)            {                _Event.DebugView_SendMessage_Write(e.ToString());                return false;            }        }        // 코드 시트에 있는 값을 읽어오는 함수        // 행단위로 검색하되 공백이 나오면 더이상 읽지 않도록 한다        // 참고로 Col 을 지정하여 열에 접근할수 있도록 한다        public static ArrayList Get_CodeData_Until_Null(DataSet Ds, int StartRow, int FixedCol)        {            // 결과            ArrayList result = new ArrayList();            try            {                // 시작행                int Count = StartRow;                // 널값이 나올때까지                 while (Ds.Tables[0].Rows[Count][FixedCol] != null && Ds.Tables[0].Rows[Count][FixedCol].ToString() != "null"                    && Ds.Tables[0].Rows[Count][FixedCol].ToString().Length != 0)                {                    // 선후공백은 제거한다                    string data = Ds.Tables[0].Rows[Count][FixedCol].ToString();                    data = data.Trim();                    result.Add(data);                    Count++;                }                return result;            }            catch            {                return result;            }        }        //        // 그룹 및 맵 정보를 가져오는 함수        // 행단위로 검색하되 지정한 총개수만큼만 가져오도록 한다        public static ArrayList Get_CodeData_Until_AllCnt(DataSet Ds, int StartRow, int FixedCol, int AllCnt)        {            // 결과            ArrayList result = new ArrayList();            // 시작행            int Count = StartRow;            // 지정한 카운트 만큼            while (Ds.Tables[0].Rows[Count][FixedCol] != null                && Ds.Tables[0].Rows[Count][FixedCol].ToString().Length != 0)            {                // 선후공백은 제거한다                string data = Ds.Tables[0].Rows[Count][FixedCol].ToString();                data = data.Trim();                result.Add(data);                Count++;                if (Count >= AllCnt + StartRow) break;            }            return result;        }        // $ 가 없는지 체크하는 함수        public static bool CheckSheetName_Character(string SheetName)        {            string temp = SheetName;            temp = temp.Replace("$", "");            if (temp.Length == SheetName.Length)                return false; // $ 가 없다!            else                return true;        }        // $ 뒤에 글자가 있는지 확인 (단 ' 를 제외하고)        public static bool CheckSheetName_Character_After(string SheetName)        {            string[] temp = null;            temp = SheetName.Split('$');            if (temp.Length != 2) // 앞에서 $가 반드시 존재하는 조건을 걸었으므로 반드시 2개가 나온다                 return false;            else if (temp.Length == 2 && (temp[1] == "'" || temp[1] == "")) // 2개로 쪼개지지만 끝은 '  혹은 공백이다                return true;            else                return false;        }        // 시트명 중복을 제외시키는 함수         public static bool CheckSheetName_SameData(string SheetName)        {            foreach (_Excel_Sheet Excel_Sheet in _Data.List_ExcelPoint)            {                if (Excel_Sheet.Sheet_Name == SheetName)                    return false;            }            return true;        }        // 시트명 예외처리..        // 원래는 정확한 데이타가 들어와야 하지만 예외처리 조건이 너무 많다..테스트 결과 몇가지 규칙을 알아내었다.. 2013.04.19        // 1. 시트명에는 반드시 뒤에 $가 들어온다        // 2. 숫자로 시작되는 시트명에는 작은따옴표가 앞뒤로 붙는다 -> '101동$'          // 3. 영문 혹은 한글로 시작되는 시트명에는 작은따옴표가 없다 -> 주차장$        // 4. 특수문자 혹은 공백으로 시작되는 시트명에는 작은따옴표가 앞뒤로 붙는다 -> ' 101동$' , '@101동$'        // 5. '101동'$Print_Area 와 같이 뒤에 이상한 문자열이 따르는 경우가 있다        // 6. 주차장1$Print_Titles 와 같이 뒤에 이상한 문자열이 따르는 경우가 있다.        //         // 처리방법은 다음과 같다        // 1. 특별 제외는 2개이다. 수량$,코드$ 는 엑셀포맷에 있지만 읽을수 없는 내용이므로 제외시킨다.        // 2. $가 없다면 시트명이 아니다        // 3. $뒤에 글자가 있는 것은 시트명이 아니다 (단, ' 를 제외하고)        // 4. 한번 읽었던 시트명은 더 읽을수가 없다 (즉, 중복처리)        // 5. 따옴표가 있든 없는 읽은 값을 그대로 사용하면 된다.                public static bool Import_Point_CheckSheetName(string SheetName)        {            // 수량$, 코드$는 읽을수 없다            if (SheetName == "수량$"                || SheetName == "코드$"                || SheetName == "연동그룹$"                || SheetName == "연동설정$"                )                return false;            // $가 없다면 시트명이 아니다            else if (CheckSheetName_Character(SheetName) == false)                return false;            // $ 뒤에 글자가 있는건 시트명이 아니다            else if (CheckSheetName_Character_After(SheetName) == false)                return false;            // 중복처리            else if (CheckSheetName_SameData(SheetName) == false)                return false;            else                return true;        }        // 위치 데이타를 토대로 클래스에 사용될 위치 이름 생성        public static string Code_Position_Name_Create(string BuildingName, string StairName, string FloorName)        {            // 모두 None 값이라면 수신기로 대체            if (BuildingName == _Text.None && StairName == _Text.None && FloorName == _Text.None) return "수신기";            string TempResultPostionName = null;            // 빌딩 : None 은 언급하지 않는다            if (BuildingName != _Text.None) TempResultPostionName = BuildingName;            // 공백처리            if (TempResultPostionName != null) TempResultPostionName = TempResultPostionName.Trim();            // 층 : None 은 언급하지 않는다            if (StairName != _Text.None) TempResultPostionName = TempResultPostionName + _Text.Blank + StairName;            // 공백처리            if (TempResultPostionName != null) TempResultPostionName = TempResultPostionName.Trim();            // 계단 : None 은 언급하지 않는다            if (FloorName != _Text.None) TempResultPostionName = TempResultPostionName + _Text.Blank + FloorName;            // 공백처리            if (TempResultPostionName != null) TempResultPostionName = TempResultPostionName.Trim();            // 모두 공백이라면 None 으로 처리한다            if (TempResultPostionName == null) TempResultPostionName = _Text.None;            return TempResultPostionName;        }        // 이름으로 해쉬테이블에 조회해서 있다면 사용여부 변수를 true 변환        public static bool Code_Position_Enable_Check(string CodePosition_Name)        {            if (_Data.HASH_CodePosition.ContainsKey(CodePosition_Name) == true)            {                // 사용여부                 ((_Code_Position)_Data.HASH_CodePosition[CodePosition_Name]).Enable = true;                return true;            }            return false;        }        // 사용여부를 토대로 나머지는 모두 지워버림        public static void Code_Postion_Create()        {            // 결과를 저장            Hashtable Result_HASH_CodePosition = new Hashtable();            ArrayList Result_LIST_CodePosition_NAME = new ArrayList();            foreach (string CodePosition_NAME in _Data.LIST_CodePosition_NAME)            {                // cyim 2013.6.20 코드정보는 사용을 하든 안하든 무조건 추가하도록 만든다, 다만 중복은 허용하지 않도록 만든다                // cyim 2013.6.26 FPER 에서 로딩속도가 너무 오래걸리므로 일단 사용하는것으로만 처리한다                if (((_Code_Position)_Data.HASH_CodePosition[CodePosition_NAME]).Enable == true)                {                    // 중복허용안함                    if (Result_LIST_CodePosition_NAME.Contains(CodePosition_NAME) == false)                    {                        // 해쉬에 추가                        Result_HASH_CodePosition.Add(CodePosition_NAME, ((_Code_Position)_Data.HASH_CodePosition[CodePosition_NAME]));                        // 리스트에 추가                        Result_LIST_CodePosition_NAME.Add(CodePosition_NAME);                    }                }            }            // 사용여부가 true 인것만 저장함            _Data.HASH_CodePosition = Result_HASH_CodePosition;            _Data.LIST_CodePosition_NAME = Result_LIST_CodePosition_NAME;        }        // 코드값 읽기        public static bool Import_Point_GetCode(DataTable Sheets, OleDbConnection Connection)        {            try            {                // 코드 시트명을 가져온다                                 for (int i = 0; i < Sheets.Rows.Count; i++)                {                    // 만약 가져오지 못한다면 실패로 처리함, 코드 시트명은 고정되어 있다! => 코드$                     if (Sheets.Rows[i]["TABLE_NAME"].ToString() == "코드$")                    {                        // 시트명                        string sheetname = Sheets.Rows[i]["TABLE_NAME"].ToString();                        OleDbCommand Command = new OleDbCommand("Select * From [코드$]", Connection);                        OleDbDataAdapter dapt = new OleDbDataAdapter(Command);                        DataSet ds = new DataSet();                        dapt.Fill(ds);                        ///                        /// 코드값들을 읽는다                        ///                        // 건물 이름                        ArrayList List_Building_Name = new ArrayList();                        ArrayList List_Building_Position = new ArrayList();                        ArrayList List_Building_Emergency = new ArrayList();                        // 계단                        ArrayList List_Stair_Name = new ArrayList();                        ArrayList List_Stair_Position = new ArrayList();                        ArrayList List_Stair_Emergency = new ArrayList();                        // 층                        ArrayList List_Floor_Name = new ArrayList();                        ArrayList List_Floor_Position = new ArrayList();                        ArrayList List_Floor_Emergency = new ArrayList();                        // 입력                        ArrayList List_Input_TypeName = new ArrayList();                        // 출력                        ArrayList List_Output_TypeName = new ArrayList();                        ArrayList List_Output_SEQ = new ArrayList();                        ArrayList List_Output_USE = new ArrayList();                        // IO 보드                        ArrayList List_IOBoard_Name = new ArrayList();                        ArrayList List_IOBoard_ComPort = new ArrayList();                        ArrayList List_IOBoard_BoardID = new ArrayList();                        ArrayList List_IOBoard_LoopNo = new ArrayList();                        ArrayList List_IOBoard_RepeaterID = new ArrayList();                        ArrayList List_IOBoard_DeviceID = new ArrayList();                        ArrayList List_IOBoard_InOut = new ArrayList();                        ArrayList List_IOBoard_AddRepeaterYesNo = new ArrayList();                        ArrayList List_IOBoard_AddRepeaterType = new ArrayList();                        // 이벤트 타입                        ArrayList List_EventType_Type = new ArrayList();                        ArrayList List_EventType_Name = new ArrayList();                        // 아날로그 감지기 레벨 및 시간                        ArrayList List_Analog_Level_Smoke = new ArrayList();    // cyim 2016.07.27 : 아날로그 감지기 레벨 감지기 타입별 설정 기능                        ArrayList List_Analog_Level_Heat = new ArrayList();                        ArrayList List_FireDay_Time = new ArrayList();                        // 건물코드 읽기                        List_Building_Name = Get_CodeData_Until_Null(ds, 3, 0);                        List_Building_Position = Get_CodeData_Until_Null(ds, 3, 1);                        List_Building_Emergency = Get_CodeData_Until_Null(ds, 3, 2);                        // 계단코드 읽기                        List_Stair_Name = Get_CodeData_Until_Null(ds, 3, 3);                        List_Stair_Position = Get_CodeData_Until_Null(ds, 3, 4);                        List_Stair_Emergency = Get_CodeData_Until_Null(ds, 3, 5);                        // 층코드 읽기                        List_Floor_Name = Get_CodeData_Until_Null(ds, 3, 6);                        List_Floor_Position = Get_CodeData_Until_Null(ds, 3, 7);                        List_Floor_Emergency = Get_CodeData_Until_Null(ds, 3, 8);                        // 입력코드 읽기                         List_Input_TypeName = Get_CodeData_Until_Null(ds, 3, 10);                        // 출력코드 읽기                        List_Output_TypeName = Get_CodeData_Until_Null(ds, 3, 12);                        List_Output_SEQ = Get_CodeData_Until_Null(ds, 3, 13);                        List_Output_USE = Get_CodeData_Until_Null(ds, 3, 14);                        // IO 보드 읽기                        List_IOBoard_Name = Get_CodeData_Until_Null(ds, 3, 18);                        List_IOBoard_ComPort = Get_CodeData_Until_Null(ds, 3, 19);                        List_IOBoard_BoardID = Get_CodeData_Until_Null(ds, 3, 20);                        List_IOBoard_LoopNo = Get_CodeData_Until_Null(ds, 3, 21);                        List_IOBoard_RepeaterID = Get_CodeData_Until_Null(ds, 3, 22);                        List_IOBoard_DeviceID = Get_CodeData_Until_Null(ds, 3, 23);                        List_IOBoard_InOut = Get_CodeData_Until_Null(ds, 3, 24);                        List_IOBoard_AddRepeaterYesNo = Get_CodeData_Until_Null(ds, 3, 25);                        List_IOBoard_AddRepeaterType = Get_CodeData_Until_Null(ds, 3, 26);                        // 이벤트 타입 읽기                        List_EventType_Type = Get_CodeData_Until_Null(ds, 3, 28);                        List_EventType_Name = Get_CodeData_Until_Null(ds, 3, 29);                        // 아날로그 감지기 레벨 및 시간                        List_Analog_Level_Smoke = Get_CodeData_Until_Null(ds, 3, 32);                        List_Analog_Level_Heat = Get_CodeData_Until_Null(ds, 12, 32);    // cyim 2016.07.27 : 아날로그 감지기 레벨 감지기 타입별 설정 기능                                           List_FireDay_Time = Get_CodeData_Until_Null(ds, 3, 34);                        // 단, 코드 값중에 하나라도 빈값이라면 취소                        if (List_Building_Name.Count == 0 || List_Building_Position.Count == 0 || List_Building_Emergency.Count == 0                            || List_Stair_Name.Count == 0 || List_Stair_Position.Count == 0 || List_Stair_Emergency.Count == 0                            || List_Floor_Name.Count == 0 || List_Floor_Position.Count == 0 || List_Floor_Emergency.Count == 0)                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError1, 0);                            return false;                        }                        if (List_Input_TypeName.Count == 0 || List_Output_TypeName.Count == 0 || List_Output_SEQ.Count == 0 || List_Output_USE.Count == 0)                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError7, 0);                            return false;                        }                        if (List_IOBoard_Name.Count == 0 || List_IOBoard_ComPort.Count == 0 || List_IOBoard_BoardID.Count == 0                            || List_IOBoard_LoopNo.Count == 0 || List_IOBoard_RepeaterID.Count == 0 || List_IOBoard_DeviceID.Count == 0                            || List_IOBoard_InOut.Count == 0 || List_IOBoard_AddRepeaterYesNo.Count == 0 || List_IOBoard_AddRepeaterYesNo.Count == 0)                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError8, 0);                            return false;                        }                        if (List_EventType_Type.Count == 0 || List_EventType_Name.Count == 0)                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError9, 0);                            return false;                        }                        //                        // 단, 코드의 3가지는 모두 개수가 동일해야한다. 또한 출력코드 및 IO 보드 및 이벤트 타입은 데이타 레코드수가 동일해야한다                        //                        if ((List_Building_Name.Count != List_Building_Position.Count) || (List_Building_Name.Count != List_Building_Emergency.Count))                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError2, 0);                            return false;                        }                        if ((List_Stair_Name.Count != List_Stair_Position.Count) || (List_Stair_Name.Count != List_Stair_Emergency.Count))                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError2, 0);                            return false;                        }                        if ((List_Floor_Name.Count != List_Floor_Position.Count) || (List_Floor_Name.Count != List_Floor_Emergency.Count))                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError2, 0);                            return false;                        }                        if (List_Output_TypeName.Count + List_Output_SEQ.Count + List_Output_USE.Count != List_Output_TypeName.Count * 3)                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError4, 0);                            return false;                        }                        if (List_IOBoard_Name.Count + List_IOBoard_ComPort.Count + List_IOBoard_BoardID.Count + List_IOBoard_LoopNo.Count + List_IOBoard_RepeaterID.Count                            + List_IOBoard_DeviceID.Count + List_IOBoard_InOut.Count + List_IOBoard_AddRepeaterYesNo.Count + List_IOBoard_AddRepeaterType.Count != List_IOBoard_Name.Count * 9)                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError5, 0);                            return false;                        }                        if (List_EventType_Type.Count != List_EventType_Name.Count)                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError6, 0);                            return false;                        }                        ///                        /// 데이타베이스 연동을 위한 클래스를 생성한다                        ///                        // 위치코드 및 비상코드를 생성한다 (건물-계단-층 순으로 고유의 6자리 코드를 생성한다                        // 또한 여기에 명칭을 정리한다. 이 경우에 공백으로 각 데이타를 구분하도록 한다                        // ex : 101동 - 1계단 - None => 101동 1계단                        // ex : 101동 - None - B1F => 101동 B1F                        _Data.HASH_CodePosition.Clear();                        _Data.LIST_CodePosition_NAME.Clear();                        foreach (string BuildingName in List_Building_Name)                        {                            foreach (string StairName in List_Stair_Name)                            {                                foreach (string FloorName in List_Floor_Name)                                {                                    // 클래스 생성                                    _Code_Position Code_Position = new _Code_Position();                                    ///                                    /// 아이디                                    ///                                    //Code_Position.Code_Position_ID =                                     //    _Convert.String_to_Int_TwoType(List_Building.IndexOf(BuildingName).ToString()) +                                    //    _Convert.String_to_Int_TwoType(List_Stair.IndexOf(StairName).ToString()) +                                    //    _Convert.String_to_Int_TwoType(List_Floor.IndexOf(FloorName).ToString());                                    // 인덱스는 동일하므로                                     int Temp_Index_Building = List_Building_Name.IndexOf(BuildingName);                                    int Temp_Index_Stair = List_Stair_Name.IndexOf(StairName);                                    int Temp_Index_Floor = List_Floor_Name.IndexOf(FloorName);                                    ///                                    /// 위치코드                                    ///                                    Code_Position.Code_Position_ID =                                            _Convert.String_to_Int_TwoType(List_Building_Position[Temp_Index_Building].ToString()) +                                            _Convert.String_to_Int_TwoType(List_Stair_Position[Temp_Index_Stair].ToString()) +                                            _Convert.String_to_Int_TwoType(List_Floor_Position[Temp_Index_Floor].ToString());                                    ///                                    /// 비상방송코드                                    ///                                    Code_Position.Code_Emergency_ID =                                            _Convert.String_to_Int_TwoType(List_Building_Emergency[Temp_Index_Building].ToString()) +                                            _Convert.String_to_Int_TwoType(List_Stair_Emergency[Temp_Index_Stair].ToString()) +                                            _Convert.String_to_Int_TwoType(List_Floor_Emergency[Temp_Index_Floor].ToString());                                    ///                                    /// 이름                                    ///                                    Code_Position.Code_Position_NAME = Code_Position_Name_Create(BuildingName, StairName, FloorName);                                    // 사용여부 해제                                    Code_Position.Enable = false;                                    // 해쉬 추가                                     // (디폴트로 생성되는 위치 코드 리스트이며 차후에 Import_Point 함수에서 실제로 사용되는 위치만 추출해서 변경된다                                    // ID 를 참조하는게 아니라 이름을 기준으로 참조하므로 사용에 주의                                    if (_Hash.Add(_Data.HASH_CodePosition, Code_Position.Code_Position_NAME, Code_Position) == true)                                    {                                        _Data.LIST_CodePosition_NAME.Add(Code_Position.Code_Position_NAME);                                    }                                }                            }                        }                        //                        // 입력코드 및 출력코드를 생성한결과에 데이타베이스의 TB_DEVICE_TYPE 에 저장하기 위한 필드들을 매칭시켜 저장해둔다                        //                        _Data.LIST_CodeDeviceType.Clear();                        // 입력                        foreach (string Input_TypeName in List_Input_TypeName)                        {                            _Code_Device_Type Table_Device_Type = new _Code_Device_Type();                            // 데이타를 추출한다 (예시 : IA 일반화재입력)                            string[] Temp_Input_TypeName = Input_TypeName.Split(' ');                            if (Temp_Input_TypeName.Length != 2)                            {                                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError3, 0);                                return false;                            }                            // 데이타 저장                            Table_Device_Type.DEVICE_TYPE = Temp_Input_TypeName[0];                            Table_Device_Type.DEVICE_TYPE_NAME = Temp_Input_TypeName[1];                            Table_Device_Type.SYMBOL_TYPE = "I";                            Table_Device_Type.SEQ_NO = "0";                            Table_Device_Type.USE_FLAG = "Y";                            // 클래스에 추가                            _Data.LIST_CodeDeviceType.Add(Table_Device_Type);                        }                        // 출력                        foreach (string Output_TypeName in List_Output_TypeName)                        {                            _Code_Device_Type Table_Device_Type = new _Code_Device_Type();                            // 데이타를 추출한다 (예시 : OA 주경종)                            string[] Temp_Output_TypeName = Output_TypeName.Split(' ');                            if (Temp_Output_TypeName.Length != 2)                            {                                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError3, 0);                                return false;                            }                            // 데이타 저장                            Table_Device_Type.DEVICE_TYPE = Temp_Output_TypeName[0];                            Table_Device_Type.DEVICE_TYPE_NAME = Temp_Output_TypeName[1];                            Table_Device_Type.SYMBOL_TYPE = "O";                            Table_Device_Type.SEQ_NO = List_Output_SEQ[List_Output_TypeName.IndexOf(Output_TypeName)].ToString();                            Table_Device_Type.USE_FLAG = List_Output_USE[List_Output_TypeName.IndexOf(Output_TypeName)].ToString(); ;                            // 클래스에 추가                            _Data.LIST_CodeDeviceType.Add(Table_Device_Type);                        }                        //                        // IO보드를 생성한결과에 데이타베이스의 TB_DEVICE 에 저장하기 위한 필드들을 매칭시켜 저장해둔다                        //                        // 중복된 내용이 있다면 사용불가                        ArrayList Temp_IOBoard_Name = new ArrayList();                        foreach (string Name in List_IOBoard_Name)                        {                            if (Temp_IOBoard_Name.Contains(Name) == false)                                Temp_IOBoard_Name.Add(Name);                        }                        if (Temp_IOBoard_Name.Count != List_IOBoard_Name.Count)                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError10, 0);                            return false;                        }                        _Data.LIST_CodeIOBoard.Clear();                        // IO                        foreach (string IOBoard_Name in List_IOBoard_Name)                        {                            _Code_IO_Board IO_Board = new _Code_IO_Board();                            // 데이타 저장                            IO_Board.IOBOARD_NAME = IOBoard_Name;                            IO_Board.IOBOARD_COM_PORT = List_IOBoard_ComPort[List_IOBoard_Name.IndexOf(IOBoard_Name)].ToString();                            IO_Board.IOBOARD_BOARD_ID = List_IOBoard_BoardID[List_IOBoard_Name.IndexOf(IOBoard_Name)].ToString();                            IO_Board.IOBOARD_LOOP_NO = List_IOBoard_LoopNo[List_IOBoard_Name.IndexOf(IOBoard_Name)].ToString();                            IO_Board.IOBOARD_REPEATER_ID = List_IOBoard_RepeaterID[List_IOBoard_Name.IndexOf(IOBoard_Name)].ToString();                            IO_Board.IOBOARD_DEVICE_ID = List_IOBoard_DeviceID[List_IOBoard_Name.IndexOf(IOBoard_Name)].ToString();                            IO_Board.IOBOARD_INOUT = List_IOBoard_InOut[List_IOBoard_Name.IndexOf(IOBoard_Name)].ToString();                            IO_Board.IOBOARD_ADDREPEATER_YN = List_IOBoard_AddRepeaterYesNo[List_IOBoard_Name.IndexOf(IOBoard_Name)].ToString();                            IO_Board.IOBOARD_ADDREPEATER_TYPE = List_IOBoard_AddRepeaterType[List_IOBoard_Name.IndexOf(IOBoard_Name)].ToString();                            // 클래스에 추가                            _Data.LIST_CodeIOBoard.Add(IO_Board);                        }                        //                        // 이벤트타입 생성한결과에 데이타베이스의 TB_EVENT_TYPE 에 저장하기 위한 필드들을 매칭시켜 저장해둔다                        //                        _Data.LIST_CodeEventType.Clear();                        // 이벤트 타입                        foreach (string EventType in List_EventType_Type)                        {                            _Code_Event_Type Event_Type = new _Code_Event_Type();                            // 데이타 저장                            Event_Type.EVENT_TYPE = EventType;                            Event_Type.EVENT_TYPE_NAME = List_EventType_Name[List_EventType_Type.IndexOf(EventType)].ToString();                            // 클래스에 추가                            _Data.LIST_CodeEventType.Add(Event_Type);                        }                        //                        // 아날로그 감지 레벨 및 시간                        //                        // 0 : falut, 1 : PreFire, 2 : FireDay, 3 : FireNight                        // cyim 2016.07.27 : 아날로그 감지기 레벨 감지기 타입별 설정 기능                        _Data.LIST_CodeAnalogLevel_Smoke.Clear();                        if (List_Analog_Level_Smoke.Count == 4)                            _Data.LIST_CodeAnalogLevel_Smoke = (ArrayList)List_Analog_Level_Smoke.Clone();                        else if (List_Analog_Level_Smoke.Count != 0)                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError11, 0);                            return false;                        }                        _Data.LIST_CodeAnalogLevel_Heat.Clear();                        if (List_Analog_Level_Heat.Count == 4)                            _Data.LIST_CodeAnalogLevel_Heat = (ArrayList)List_Analog_Level_Heat.Clone();                        else if (List_Analog_Level_Heat.Count != 0)                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError11, 0);                            return false;                        }                        _Data.LIST_CodeFireDayTime.Clear();                        if (List_FireDay_Time.Count == 4)                        {                            int start_Hour = _Convert.Null_to_IntZero(List_FireDay_Time[0]);                            int start_Minute = _Convert.Null_to_IntZero(List_FireDay_Time[1]);                            int end_Hour = _Convert.Null_to_IntZero(List_FireDay_Time[2]);                            int end_Minute = _Convert.Null_to_IntZero(List_FireDay_Time[3]);                            if ((start_Hour > end_Hour) || (start_Hour == end_Hour && start_Minute > end_Minute))                            {                                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError11, 0);                                return false;                            }                            _Data.LIST_CodeFireDayTime = (ArrayList)List_FireDay_Time.Clone();                        }                        else if (List_FireDay_Time.Count != 0)                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 550, 150, _Text.CodeError11, 0);                            return false;                        }                        return true;                    }                }                return false;            }            catch (Exception e)            {                _Event.DebugView_SendMessage_Write(e.ToString());                return false;            }        }        // 사용하지 않음        public static bool Import_Point_GetGroup(DataTable Sheets, OleDbConnection Connection)        {            try            {                // 코드 시트명을 가져온다                                 for (int i = 0; i < Sheets.Rows.Count; i++)                {                    // 만약 가져오지 못한다면 실패로 처리함, 코드 시트명은 고정되어 있다! => 연동그룹$                     if (Sheets.Rows[i]["TABLE_NAME"].ToString() == "연동그룹$")                    {                        // 시트명                        string sheetname = Sheets.Rows[i]["TABLE_NAME"].ToString();                        OleDbCommand Command = new OleDbCommand("Select * From [연동그룹$]", Connection);                        OleDbDataAdapter dapt = new OleDbDataAdapter(Command);                        DataSet ds = new DataSet();                        dapt.Fill(ds);                        ///                        /// 코드값들을 읽는다                        ///                        // 그룹아이디                        ArrayList List_GroupID = new ArrayList();                        // 그룹명                        ArrayList List_GroupName = new ArrayList();                        // 총개수                        int AllCnt = Int32.Parse(Read_Data(ds, 1, 0));                        // 그룹아이디 읽기                        List_GroupID = Get_CodeData_Until_AllCnt(ds, 3, 0, AllCnt);                        // 그룹명 읽기                        List_GroupName = Get_CodeData_Until_AllCnt(ds, 3, 1, AllCnt);                        // 단, 총개수와 입력한 데이타 개수가 동일하지 않으면 잘못된 데이타                        if (AllCnt != List_GroupID.Count || AllCnt != List_GroupName.Count)                            return false;                        ///                        /// 데이타베이스 연동을 위한 클래스를 생성한다                        ///                        _Data.List_ExcelGroup.Clear();                        // 그룹정보를 생성한다                         for (int j = 0; j < AllCnt; j++)                        {                            _Excel_Group Excel_Group = new _Excel_Group();                            Excel_Group.Group_ID = List_GroupID[j].ToString();                            Excel_Group.Group_Name = List_GroupName[j].ToString();                            _Data.List_ExcelGroup.Add(Excel_Group);                        }                        return true;                    }                }                // _Data.List_ExcelGroup.Count 가 0 도 허용한다                return true;            }            catch (Exception e)            {                _Event.DebugView_SendMessage_Write(e.ToString());                return false;            }        }        // 사용하지 않음        public static bool Import_Point_GetMap(DataTable Sheets, OleDbConnection Connection)        {            try            {                // 코드 시트명을 가져온다                                 for (int i = 0; i < Sheets.Rows.Count; i++)                {                    // 만약 가져오지 못한다면 실패로 처리함, 코드 시트명은 고정되어 있다! => 연동그룹$                     if (Sheets.Rows[i]["TABLE_NAME"].ToString() == "연동설정$")                    {                        // 시트명                        string sheetname = Sheets.Rows[i]["TABLE_NAME"].ToString();                        OleDbCommand Command = new OleDbCommand("Select * From [연동설정$]", Connection);                        OleDbDataAdapter dapt = new OleDbDataAdapter(Command);                        DataSet ds = new DataSet();                        dapt.Fill(ds);                        ///                        /// 코드값들을 읽는다                        ///                        // 그룹아이디                        ArrayList List_MapID = new ArrayList();                        // 그룹명                        ArrayList List_MapName = new ArrayList();                        // 총개수                        int AllCnt = Int32.Parse(Read_Data(ds, 1, 0));                        // 그룹아이디 읽기                        List_MapID = Get_CodeData_Until_AllCnt(ds, 3, 0, AllCnt);                        // 그룹명 읽기                        List_MapName = Get_CodeData_Until_AllCnt(ds, 3, 1, AllCnt);                        // 단, 총개수와 입력한 데이타 개수가 동일하지 않으면 잘못된 데이타                        if (AllCnt != List_MapID.Count || AllCnt != List_MapName.Count)                            return false;                        ///                        /// 데이타베이스 연동을 위한 클래스를 생성한다                        ///                        _Data.List_ExcelMap.Clear();                        // 그룹정보를 생성한다                         for (int j = 0; j < AllCnt; j++)                        {                            _Excel_Map Excel_Map = new _Excel_Map();                            Excel_Map.Map_ID = List_MapID[j].ToString();                            Excel_Map.Map_Name = List_MapName[j].ToString();                            _Data.List_ExcelMap.Add(Excel_Map);                        }                        return true;                    }                }                // _Data.List_ExcelMap.Count 가 0 도 허용한다                return true;            }            catch (Exception e)            {                _Event.DebugView_SendMessage_Write(e.ToString());                return false;            }        }        public static string Read_Data(DataSet ds, int row, int col)        {            // 디버깅으로 사용되는 데이타            Debug_Row = row + 1;            Debug_Col = col + 1;            // 반환값            return ds.Tables[0].Rows[row][col].ToString();        }        // 그룹 엑셀 임포트        public static bool Import_Group(string FileFullPath)        {            string CheckConnectionString = ConnectionString(FileFullPath);            if (CheckConnectionString == null)            {                // 파일 확장자를 확인해주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.CheckFileFormatInform, 0);                return false;            }            // 엑셀 문서 접근            OleDbConnection Connection = new OleDbConnection(CheckConnectionString);            try            {                // 엑셀 문서 읽기                Connection.Open();                // 시트명을 가져온다                DataTable worksheets = Connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);                // 코드 시트명을 가져온다                                 for (int i = 0; i < worksheets.Rows.Count; i++)                {                    // 만약 가져오지 못한다면 실패로 처리함, 코드 시트명은 고정되어 있다! => 연동그룹$                     if (worksheets.Rows[i]["TABLE_NAME"].ToString() == "연동그룹$")                    {                        // 시트명                        string sheetname = worksheets.Rows[i]["TABLE_NAME"].ToString();                        OleDbCommand Command = new OleDbCommand("Select * From [연동그룹$]", Connection);                        OleDbDataAdapter dapt = new OleDbDataAdapter(Command);                        DataSet ds = new DataSet();                        dapt.Fill(ds);                        ///                        /// 코드값들을 읽는다                        ///                        // 그룹아이디                        ArrayList List_GroupID = new ArrayList();                        // 그룹명                        ArrayList List_GroupName = new ArrayList();                        // 총개수가 '' 또는 ' ' 는 에러 메시지 출력                        if (Read_Data(ds, 1, 0).Trim() == _Text.Null)                        {                            string Error = " [시트명]: 연동그룹" + " [행]:2  [열]:1";                            // 파일 포맷이 잘못되었습니다                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.FailDataInform + Error, 0);                            // LOG                            _Event.DebugView_SendMessage_Write(_Text.NotReadExcelFile + Error + " 의 정보를 확인해주세요 ");                            // 엑셀 읽기 세션 해제                            if (Connection != null) Connection.Close();                            return false;                        }                        // 총개수                        int AllCnt = Int32.Parse(Read_Data(ds, 1, 0));                        // 먼저 아이디, 맵리스트, 연동그룹수 값이 '' 또는 ' ' 는 에러 메시지 출력                        for (int x = 0; x < 2; x++)                        {                            for (int y = 0; y < AllCnt; y++)                            {                                string Value = Read_Data(ds, y + 3, x);                                // 값이 '' 또는 ' ' 는 에러 메시지 출력                                if (Value.Trim() == _Text.Null)                                {                                    // 1을 플러스 한 이유는 엑셀의 에러 지점을 정확히 나타내기 위해                                    string Error = " [시트명]: 연동그룹" + " [행]:" + (y + 3 + 1) + " [열]:" + (x + 1);                                    // 파일 포맷이 잘못되었습니다                                    _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.FailDataInform + Error, 0);                                    // LOG                                    _Event.DebugView_SendMessage_Write(_Text.NotReadExcelFile + Error + " 의 정보를 확인해주세요 ");                                    // 엑셀 읽기 세션 해제                                    if (Connection != null) Connection.Close();                                    return false;                                }                                else                                {                                    if (x == 0)                                    {                                        if (_Data.Project_MapGroupIDTypeNumber == "6" && Value.Length != 7) // 6자리모드 인 경우에는 7자리이다                                         {                                            // 1을 플러스 한 이유는 엑셀의 에러 지점을 정확히 나타내기 위해                                            string Error = " [시트명]: 연동그룹" + " [행]:" + (y + 3 + 1) + " [열]:" + (x + 1);                                            // 파일 포맷이 잘못되었습니다                                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 600, 150, _Text.DigitNumberExcel_6 + Error, 0);                                            // LOG                                            _Event.DebugView_SendMessage_Write(_Text.DigitNumberExcel_6 + Error + " 의 정보를 확인해주세요 ");                                            // 엑셀 읽기 세션 해제                                            if (Connection != null) Connection.Close();                                            return false;                                        }                                        if (_Data.Project_MapGroupIDTypeNumber == "4" && Value.Length != 5) // 4자리모드 인 경우에는 5자리이다                                        {                                            // 1을 플러스 한 이유는 엑셀의 에러 지점을 정확히 나타내기 위해                                            string Error = " [시트명]: 연동그룹" + " [행]:" + (y + 3 + 1) + " [열]:" + (x + 1);                                            // 파일 포맷이 잘못되었습니다                                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 600, 150, _Text.DigitNumberExcel_4 + Error, 0);                                            // LOG                                            _Event.DebugView_SendMessage_Write(_Text.DigitNumberExcel_4 + Error + " 의 정보를 확인해주세요 ");                                            // 엑셀 읽기 세션 해제                                            if (Connection != null) Connection.Close();                                            return false;                                        }                                    }                                }                            }                        }                        // 그룹아이디가 엑셀 정보 안에서 동일한게 있는지 확인                        ArrayList Group_List = new ArrayList();                        for (int y = 0; y < AllCnt; y++)                        {                            string Value = Read_Data(ds, y + 3, 0);                            if (Group_List.Contains(Value.Trim()) == false) // 없다                            {                                Group_List.Add(Value.Trim());                            }                            else // 있다                            {                                // 1을 플러스 한 이유는 엑셀의 에러 지점을 정확히 나타내기 위해                                string Error = " [시트명]: 연동그룹" + " [행]:" + (y + 3 + 1) + " [열]:" + (0 + 1);                                // 파일 포맷이 잘못되었습니다                                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.FailDataInform + Error, 0);                                // LOG                                _Event.DebugView_SendMessage_Write(_Text.NotReadExcelFile + Error + " 의 정보를 확인해주세요 ");                                // 엑셀 읽기 세션 해제                                if (Connection != null) Connection.Close();                                return false;                            }                        }                        // 그룹아이디 읽기                        List_GroupID = Get_CodeData_Until_AllCnt(ds, 3, 0, AllCnt);                        // 그룹명 읽기                        List_GroupName = Get_CodeData_Until_AllCnt(ds, 3, 1, AllCnt);                        //// 단, 총개수와 입력한 데이타 개수가 동일하지 않으면 잘못된 데이타                        //if (AllCnt != List_GroupID.Count || AllCnt != List_GroupName.Count)                        //    return false;                        ///                        /// 데이타베이스 연동을 위한 클래스를 생성한다                        ///                        _Data.List_ExcelGroup.Clear();                        // 그룹정보를 생성한다                         for (int j = 0; j < AllCnt; j++)                        {                            _Excel_Group Excel_Group = new _Excel_Group();                            Excel_Group.Group_ID = List_GroupID[j].ToString();                            Excel_Group.Group_Name = List_GroupName[j].ToString();                            _Data.List_ExcelGroup.Add(Excel_Group);                        }                        return true;                    }                }                // 엑셀 읽기 세션 해제                if (Connection != null) Connection.Close();                // _Data.List_ExcelGroup.Count 가 0 도 허용한다                return true;            }            catch (Exception e)            {                _Event.DebugView_SendMessage_Write(e.ToString());                return false;            }        }        // 맵 연동 엑셀 임포트        public static bool Import_Map(string FileFullPath, string ReceiverID)        {            string CheckConnectionString = ConnectionString(FileFullPath);            if (CheckConnectionString == null)            {                // 파일 확장자를 확인해주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.CheckFileFormatInform, 0);                return false;            }            // 엑셀 문서 접근            OleDbConnection Connection = new OleDbConnection(CheckConnectionString);            try            {                // 엑셀 문서 읽기                Connection.Open();                // 시트명을 가져온다                DataTable worksheets = Connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);                // 코드 시트명을 가져온다                                 for (int i = 0; i < worksheets.Rows.Count; i++)                {                    // 만약 가져오지 못한다면 실패로 처리함, 코드 시트명은 고정되어 있다! => 연동그룹$                     if (worksheets.Rows[i]["TABLE_NAME"].ToString() == "연동설정$")                    {                        // 시트명                        string sheetname = worksheets.Rows[i]["TABLE_NAME"].ToString();                        OleDbCommand Command = new OleDbCommand("Select * From [연동설정$]", Connection);                        OleDbDataAdapter dapt = new OleDbDataAdapter(Command);                        DataSet ds = new DataSet();                        dapt.Fill(ds);                        ///                        /// 코드값들을 읽는다                        ///                        // 그룹아이디                        ArrayList List_MapID = new ArrayList();                        // 그룹명                        ArrayList List_MapName = new ArrayList();                        // 연동 그룹수                        ArrayList List_GroupNumber = new ArrayList();                        // 추가된 그룹들                        ArrayList List_Groups = new ArrayList();                        // 입력 개수                        ArrayList List_InDeviceNumber = new ArrayList();                        // 입력 디바이스들                        ArrayList List_InDevice = new ArrayList();                        // 총개수가 '' 또는 ' ' 는 에러 메시지 출력                        if (Read_Data(ds, 1, 0).Trim() == _Text.Null)                        {                            // 1을 플러스 한 이유는 엑셀의 에러 지점을 정확히 나타내기 위해                            string Error = " [시트명]: 연동그룹" + " [행]:2  [열]:1";                            // 파일 포맷이 잘못되었습니다                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.FailDataInform + Error, 0);                            // LOG                            _Event.DebugView_SendMessage_Write(_Text.NotReadExcelFile + Error + " 의 정보를 확인해주세요 ");                            // 엑셀 읽기 세션 해제                            if (Connection != null) Connection.Close();                            return false;                        }                        // 총개수                        int AllCnt = Int32.Parse(Read_Data(ds, 1, 0));                        // 입력개수가 '' 또는 ' ' 는 에러 메시지 출력                        for (int y = 0; y < AllCnt; y++)                        {                            string Value = Read_Data(ds, y + 3, 13);                            // 값이 '' 또는 ' ' 는 에러 메시지 출력                            if (Value.Trim() == _Text.Null)                            {                                // 1을 플러스 한 이유는 엑셀의 에러 지점을 정확히 나타내기 위해                                string Error = " [시트명]: 연동설정" + " [행]:" + (y + 3 + 1) + " [열]:" + (13 + 1);                                // 파일 포맷이 잘못되었습니다                                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.FailDataInform + Error, 0);                                // LOG                                _Event.DebugView_SendMessage_Write(_Text.NotReadExcelFile + Error + " 의 정보를 확인해주세요 ");                                // 엑셀 읽기 세션 해제                                if (Connection != null) Connection.Close();                                return false;                            }                        }                        // 아이디, 맵리스트, 연동그룹수 값이 '' 또는 ' ' 는 에러 메시지 출력                        for (int x = 0; x < 3; x++)                        {                            for (int y = 0; y < AllCnt; y++)                            {                                string Value = Read_Data(ds, y + 3, x);                                // 값이 '' 또는 ' ' 는 에러 메시지 출력                                if (Value.Trim() == _Text.Null)                                {                                    // 1을 플러스 한 이유는 엑셀의 에러 지점을 정확히 나타내기 위해                                    string Error = " [시트명]: 연동설정" + " [행]:" + (y + 3 + 1) + " [열]:" + (x + 1);                                    // 파일 포맷이 잘못되었습니다                                    _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.FailDataInform + Error, 0);                                    // LOG                                    _Event.DebugView_SendMessage_Write(_Text.NotReadExcelFile + Error + " 의 정보를 확인해주세요 ");                                    // 엑셀 읽기 세션 해제                                    if (Connection != null) Connection.Close();                                    return false;                                }                                else                                {                                    if (x == 0)                                    {                                        if (_Data.Project_MapGroupIDTypeNumber == "6" && Value.Length != 7) // 6자리모드 인 경우에는 7자리이다                                         {                                            // 1을 플러스 한 이유는 엑셀의 에러 지점을 정확히 나타내기 위해                                            string Error = " [시트명]: 연동설정" + " [행]:" + (y + 3 + 1) + " [열]:" + (x + 1);                                            // 파일 포맷이 잘못되었습니다                                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 600, 150, _Text.DigitNumberExcel_6 + Error, 0);                                            // LOG                                            _Event.DebugView_SendMessage_Write(_Text.DigitNumberExcel_6 + Error + " 의 정보를 확인해주세요 ");                                            // 엑셀 읽기 세션 해제                                            if (Connection != null) Connection.Close();                                            return false;                                        }                                        if (_Data.Project_MapGroupIDTypeNumber == "4" && Value.Length != 5) // 4자리모드 인 경우에는 5자리이다                                        {                                            // 1을 플러스 한 이유는 엑셀의 에러 지점을 정확히 나타내기 위해                                            string Error = " [시트명]: 연동설정" + " [행]:" + (y + 3 + 1) + " [열]:" + (x + 1);                                            // 파일 포맷이 잘못되었습니다                                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 600, 150, _Text.DigitNumberExcel_4 + Error, 0);                                            // LOG                                            _Event.DebugView_SendMessage_Write(_Text.DigitNumberExcel_4 + Error + " 의 정보를 확인해주세요 ");                                            // 엑셀 읽기 세션 해제                                            if (Connection != null) Connection.Close();                                            return false;                                        }                                    }                                }                            }                        }                        // 맵아이디가 엑셀 정보 안에서 동일한게 있는지 확인                        ArrayList Map_List = new ArrayList();                        for (int y = 0; y < AllCnt; y++)                        {                            string Value = Read_Data(ds, y + 3, 0);                            if (Map_List.Contains(Value.Trim()) == false) // 없다                            {                                Map_List.Add(Value.Trim());                            }                            else // 있다                            {                                // 1을 플러스 한 이유는 엑셀의 에러 지점을 정확히 나타내기 위해                                string Error = " [시트명]: 연동설정" + " [행]:" + (y + 3 + 1) + " [열]:" + (0 + 1);                                // 파일 포맷이 잘못되었습니다                                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.FailDataInform + Error, 0);                                // LOG                                _Event.DebugView_SendMessage_Write(_Text.NotReadExcelFile + Error + " 의 정보를 확인해주세요 ");                                // 엑셀 읽기 세션 해제                                if (Connection != null) Connection.Close();                                return false;                            }                        }                        // 맵아이디가 DB에 동일한게 있는지 확인                        for (int y = 0; y < AllCnt; y++)                        {                            string Value = Read_Data(ds, y + 3, 0);                            //** TB_MAP 테이블에서 맵명을 모두 가지고 온다                            DataRowCollection DB_TABLE_MAP = _Db.ExecuteRead_SqlDataAdapter(_Sql.SearchAll_Table_Value("TB_MAP", "MAP_ID", Value.Trim(), null));                            if (DB_TABLE_MAP != null)                            {                                foreach (DataRow dr in DB_TABLE_MAP)                                {                                    if (DB_TABLE_MAP.Count != 0) // 없다                                    {                                        // 1을 플러스 한 이유는 엑셀의 에러 지점을 정확히 나타내기 위해                                        string Error = " [시트명]: 연동설정" + " [행]:" + (y + 3 + 1) + " [열]:" + (0 + 1);                                        // 파일 포맷이 잘못되었습니다                                        _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 500, 150, _Text.FailDataInform + Error + " 정보가 이미 DB에 있습니다 ", 0);                                        // LOG                                        _Event.DebugView_SendMessage_Write(_Text.NotReadExcelFile + Error + " 정보가 이미 DB에 있습니다 ");                                        // 엑셀 읽기 세션 해제                                        if (Connection != null) Connection.Close();                                        return false;                                    }                                }                            }                        }                        // 그룹아이디 읽기                        List_MapID = Get_CodeData_Until_AllCnt(ds, 3, 0, AllCnt);                        // 그룹명 읽기                        List_MapName = Get_CodeData_Until_AllCnt(ds, 3, 1, AllCnt);                        // 연동 그룹수 읽기                        List_GroupNumber = Get_CodeData_Until_AllCnt(ds, 3, 2, AllCnt);                        // 입력 개수                        List_InDeviceNumber = Get_CodeData_Until_AllCnt(ds, 3, 13, AllCnt);                        // 행을 하나씩 올려준다                        int PlusCount = 0;                        // 그룹 읽기                        foreach (string num in List_GroupNumber)                        {                            string data = _Text.Null;                            for (int x = 0; x < Int32.Parse(num); x++)                            {                                string Value = Read_Data(ds, PlusCount + 3, x + 3);                                // 값이 '' 또는 ' ' 는 에러 메시지 출력                                if (Value.Trim() == _Text.Null)                                {                                    string Error = " [시트명]: 연동설정" + " [행]:" + (PlusCount + 3 + 1) + " [열]:" + (x + 3 + 1);                                    // 파일 포맷이 잘못되었습니다                                    _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.FailDataInform + Error, 0);                                    // LOG                                    _Event.DebugView_SendMessage_Write(_Text.NotReadExcelFile + Error + " 의 정보를 확인해주세요 ");                                    // 엑셀 읽기 세션 해제                                    if (Connection != null) Connection.Close();                                    return false;                                }                                // :G0001:G0002:G0003:G0004 이런씩으로 저장                                data = data + ":" + Value.Trim();                            }                            if (data == _Text.Null) List_Groups.Add(_Text.Null); // 그룹을 추가하지 않은것                            else List_Groups.Add(data.Remove(0, 1)); // 그룹이 하나라도 있으면 맨 앞에 ":" 제거                            // 다음 행에서 작업                            PlusCount++;                        }                        // 행을 하나씩 올려준다                        int Count = 0;                        // 입력 읽기                        foreach (string num in List_InDeviceNumber)                        {                            string data = _Text.Null;                            for (int x = 0; x < Int32.Parse(num); x++)                            {                                string Value = Read_Data(ds, Count + 3, x + 14);                                // 값이 '' 또는 ' ' 는 에러 메시지 출력                                if (Value.Trim() == _Text.Null)                                {                                    string Error = " [시트명]: 연동설정" + " [행]:" + (Count + 3 + 1) + " [열]:" + (x + 14 + 1);                                    // 파일 포맷이 잘못되었습니다                                    _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 350, 150, _Text.FailDataInform + Error, 0);                                    // LOG                                    _Event.DebugView_SendMessage_Write(_Text.NotReadExcelFile + Error + " 의 정보를 확인해주세요 ");                                    // 엑셀 읽기 세션 해제                                    if (Connection != null) Connection.Close();                                    return false;                                }                                // 해당 입력 디바이스가 존재하는 검사                                // BOARD_ID, LOOP_NO, REPEATER_ID, DEVICE_ID                                string[] temp = Value.Trim().Split('-');                                DataRowCollection DB_TABLE_DEVICE = _Db.ExecuteRead_SqlDataAdapter(                                    _Sql.SearchAll_Table_Value("TB_DEVICE", "COMM_ID", "1", "INOUT_TYPE", "I", "BOARD_ID", temp[1], "LOOP_NO", temp[2], "REPEATER_ID", temp[3], "DEVICE_ID", temp[4], ReceiverID));                                if (DB_TABLE_DEVICE != null)                                {                                    if (DB_TABLE_DEVICE.Count == 0)                                    {                                        string Error = " [시트명]: 연동설정" + " [행]:" + (Count + 3 + 1) + " [열]:" + (x + 14 + 1);                                        // 파일 포맷이 잘못되었습니다                                        _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 500, 150, "[" + Value.Trim() + "]" + _Text.FailDevice + Error, 0);                                        // LOG                                        _Event.DebugView_SendMessage_Write(_Text.NotReadExcelFile + Error + " 의 정보를 확인해주세요 ");                                        // 엑셀 읽기 세션 해제                                        if (Connection != null) Connection.Close();                                        return false;                                    }                                }                                // 포맷이 변경되지 않는다. 어차피 각각 수신기에 대하여 엑셀은 따로 존재하고 각각 Import 수행하면 반드시 그 회로는 관할 수신기의 입력회로이다                                // :MI-01-1-001-1:MI-01-1-001-2:MI-01-1-001-2 이런씩으로 저장 ->                                data = data + ":" + Value.Trim();                            }                            if (data == _Text.Null) List_InDevice.Add(_Text.Null); // 입력디바이스 추가하지 않은것                            else List_InDevice.Add(data.Remove(0, 1)); // 입력디바이스가 하나라도 있으면 맨 앞에 ":" 제거                            // 다음 행에서 작업                            Count++;                        }                        // 단, 총개수와 입력한 데이타 개수가 동일하지 않으면 잘못된 데이타                        //if (AllCnt != List_MapID.Count || AllCnt != List_MapName.Count)                        //    return false;                        ///                        /// 데이타베이스 연동을 위한 클래스를 생성한다                        ///                        _Data.List_ExcelMap.Clear();                        // 그룹정보를 생성한다                         for (int j = 0; j < AllCnt; j++)                        {                            _Excel_Map Excel_Map = new _Excel_Map();                            Excel_Map.Map_ID = List_MapID[j].ToString();                            Excel_Map.Map_Name = List_MapName[j].ToString();                            Excel_Map.Group_Number = List_GroupNumber[j].ToString();                            Excel_Map.Groups = List_Groups[j].ToString();                            Excel_Map.InDevices = List_InDevice[j].ToString();                            _Data.List_ExcelMap.Add(Excel_Map);                        }                        return true;                    }                }                // 엑셀 읽기 세션 해제                if (Connection != null) Connection.Close();                // _Data.List_ExcelGroup.Count 가 0 도 허용한다                return true;            }            catch (Exception e)            {                _Event.DebugView_SendMessage_Write(e.ToString());                return false;            }        }        // Import          public static bool Import_Point(string FileFullPath)        {            int RepeaterRowNum = 0;            // 디버깅 변수 초기화            Debug_Row = 0;            Debug_Col = 0;            Debug_SheetName = null;            Debug_EtcMessage = null;            string CheckConnectionString = ConnectionString(FileFullPath);            if (CheckConnectionString == null)            {                // 파일 확장자를 확인해주세요                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.CheckFileFormatInform, 0);                return false;            }            // 엑셀 문서 접근            OleDbConnection Connection = new OleDbConnection(CheckConnectionString);            try            {                // 엑셀 문서 읽기                Connection.Open();                // 시트명을 가져온다                DataTable worksheets = Connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);                ///                /// 1. 코드값 저장                ///                 /// 코드 시트가 있는지 확인하고 없다면 루틴을 돌지 않도록 한다                /// 또한 _Data.Class_ExcelCode 에 코드 정보를 저장하여 차후에 사용하도록 클래스를 저장한다                ///                if (Import_Point_GetCode(worksheets, Connection) == false)                {                    // 코드 시트가 잘못되었습니다                    _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.FailCodeInform, 0);                    return false;                }                ///                 /// 2. 포인트 정보 저장                ///                 /// 포인트 정보를 저장하는 리스트이다 (가장 중요한 리스트이다, 시트별-중계기별-입출력포인트 순으로 클래스화 하여 저장한다)                ///                 // 초기화                _Data.List_ExcelPoint.Clear();                // 엑셀 시트 수에 맞게 데이타를 읽어 온다                for (int i = 0; i < worksheets.Rows.Count; i++)                {                    // 시트명                    string sheetname = worksheets.Rows[i]["TABLE_NAME"].ToString();                    // 읽지 않는 시트인지 판별                    if (Import_Point_CheckSheetName(sheetname) == true)                    {                        // Debug                        Debug_SheetName = sheetname.Replace("$", "");                        // 읽은 정보를 데이타셋에 매칭                        OleDbCommand Command = new OleDbCommand("Select * From [" + sheetname + "]", Connection);                        OleDbDataAdapter dapt = new OleDbDataAdapter(Command);                        DataSet ds = new DataSet();                        dapt.Fill(ds);                        ///                        /// _Excel_Sheet 클래스 생성                        ///                        _Excel_Sheet Excel_Sheet = new _Excel_Sheet();                        // 시트명                        Excel_Sheet.Sheet_Name = sheetname;                        // 통신 보드                         Excel_Sheet.BOARD_ID = Read_Data(ds, 1, 0);                        if (Excel_Sheet.BOARD_ID == null || Excel_Sheet.BOARD_ID.Trim().Length == 0 || Int32.Parse(Excel_Sheet.BOARD_ID) <= 0 || Int32.Parse(Excel_Sheet.BOARD_ID) > 68)                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 450, 150, _Text.ExceptionError2, 0);                            return false;                        }                        // 계통                                                Excel_Sheet.LOOP_NO = Read_Data(ds, 1, 1);                        if (Excel_Sheet.LOOP_NO == null || Excel_Sheet.LOOP_NO.Trim().Length == 0 || Int32.Parse(Excel_Sheet.LOOP_NO) <= 0 || Int32.Parse(Excel_Sheet.LOOP_NO) > 4)                        {                            _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 450, 150, _Text.ExceptionError3, 0);                            return false;                        }                        // 중계기 총개수                        Excel_Sheet.Repeater_Count = Int32.Parse(Read_Data(ds, 1, 2));                        // 시트안에 중계기 개수 만큼 루프 생성                        for (int j = 0; j < Excel_Sheet.Repeater_Count; j++)                        {                            ///                            /// _Excel_Repeater 클래스 생성                            ///                            _Excel_Repeater Excel_Repeater = new _Excel_Repeater();                            // 중계기 타입                            string Temp_Repeater_Type = Read_Data(ds, 4 + (j * 5), 1);                            if (Temp_Repeater_Type == null || Temp_Repeater_Type.Trim().Length == 0)                            {                                Debug_Row = 4 + (j * 5) + 1;                                Debug_Col = 1 + 1;                                throw new Exception();                            }                            else if (Temp_Repeater_Type == "None")                            {                                ;// 사용하지 않는 중계기는 무시한다                            }                            else                            {                                // 중계기 검사 타입                                if (Read_Data(ds, 4 + (j * 5), 1) == "4*4")                                    Excel_Repeater.TYPE = POINT_TYPE.REPEATER_4_4;                                else if (Read_Data(ds, 4 + (j * 5), 1) == "2*2")                                    Excel_Repeater.TYPE = POINT_TYPE.REPEATER_2_2;                                else if (Read_Data(ds, 4 + (j * 5), 1) == "연감지기")                                    Excel_Repeater.TYPE = POINT_TYPE.ANALOG_SMOKE;                                else if (Read_Data(ds, 4 + (j * 5), 1) == "열감지기")                                    Excel_Repeater.TYPE = POINT_TYPE.ANALOG_HEAT;                                else                                // 중계기 타입이 없다면 예외                                                                {                                    Debug_Row = 4 + (j * 5) + 1;                                    Debug_Col = 1;                                    throw new Exception();                                }                                // 필요 이상 회로 정보가 있다면 예외                                                                int Temp_RepeaterRowNum = 0;                                string Temp_Info = null;                                int Temp_Info_Cnt = 0;                                if (Excel_Repeater.TYPE == POINT_TYPE.REPEATER_2_2                                    || Excel_Repeater.TYPE == POINT_TYPE.ANALOG_SMOKE                                    || Excel_Repeater.TYPE == POINT_TYPE.ANALOG_HEAT)                                {                                    for (int k = 1; k <= 4; k++)                                    {                                        // 중계기 행번호                                        Temp_RepeaterRowNum = 4 + (j * 5);                                        // 위치정보                                        Temp_Info += Read_Data(ds, Temp_RepeaterRowNum + k, 2);                                        Temp_Info += Read_Data(ds, Temp_RepeaterRowNum + k, 3);                                        Temp_Info += Read_Data(ds, Temp_RepeaterRowNum + k, 4);                                        Temp_Info += Read_Data(ds, Temp_RepeaterRowNum + k, 5);                                        Temp_Info += Read_Data(ds, Temp_RepeaterRowNum + k, 6);                                        Temp_Info += Read_Data(ds, Temp_RepeaterRowNum + k, 7);                                        Temp_Info += Read_Data(ds, Temp_RepeaterRowNum + k, 8);                                        // 내용이 있다면                                        if (Temp_Info != null && Temp_Info.Length != 0)                                            Temp_Info_Cnt++;                                        // 초기화                                        Temp_Info = null;                                    }                                    if (Excel_Repeater.TYPE == POINT_TYPE.REPEATER_2_2)                                    {                                        // 중계기 회로가 2*2 인데 더 많은 정보가 있으므로 틀리다                                        if (Temp_Info_Cnt > 2)                                        {                                            Debug_Row = 4 + (j * 5) + 1;                                            Debug_Col = 1;                                            throw new Exception();                                        }                                    }                                    else if (Excel_Repeater.TYPE == POINT_TYPE.ANALOG_SMOKE || Excel_Repeater.TYPE == POINT_TYPE.ANALOG_HEAT)                                    {                                        // 연감지기 및 열감지기는 더 많은 정보가 있으므로 틀리다                                        if (Temp_Info_Cnt > 1)                                        {                                            Debug_Row = 4 + (j * 5) + 1;                                            Debug_Col = 1;                                            throw new Exception();                                        }                                    }                                }                                // 중계기 아이디                                Excel_Repeater.REPEATER_ID = Read_Data(ds, 4 + (j * 5), 0);                                // 중계기 아이디가 없다면 예외                                if (Excel_Repeater.REPEATER_ID == null || Excel_Repeater.REPEATER_ID.Trim().Length == 0)                                {                                    Debug_Row = 4 + (j * 5) + 1;                                    Debug_Col = 0;                                    throw new Exception();                                }                                // 중계기 위치 정보                                Excel_Repeater.Excel_Position.Building = Read_Data(ds, 4 + (j * 5), 2);                                Excel_Repeater.Excel_Position.Stair = Read_Data(ds, 4 + (j * 5), 3);                                Excel_Repeater.Excel_Position.Floor = Read_Data(ds, 4 + (j * 5), 4);                                // 중계기 위치 정보 없다면 예외                                if (Excel_Repeater.Excel_Position.Building == null || Excel_Repeater.Excel_Position.Building.Trim().Length == 0)                                {                                    Debug_Row = 4 + (j * 5) + 1;                                    Debug_Col = 2;                                    throw new Exception();                                }                                if (Excel_Repeater.Excel_Position.Stair == null || Excel_Repeater.Excel_Position.Stair.Trim().Length == 0)                                {                                    Debug_Row = 4 + (j * 5) + 1;                                    Debug_Col = 3;                                    throw new Exception();                                }                                if (Excel_Repeater.Excel_Position.Floor == null || Excel_Repeater.Excel_Position.Floor.Trim().Length == 0)                                {                                    Debug_Row = 4 + (j * 5) + 1;                                    Debug_Col = 4;                                    throw new Exception();                                }                                // 위치 코드 사용여부 체크                                string Temp_Repeater_Position_Name = Code_Position_Name_Create(                                    Excel_Repeater.Excel_Position.Building, Excel_Repeater.Excel_Position.Stair, Excel_Repeater.Excel_Position.Floor);                                // 위치 코드가 잘못되었다                                if (Code_Position_Enable_Check(Temp_Repeater_Position_Name) == false)                                {                                    Debug_EtcMessage = _Text.FailDataInform_NotCodePostionName;                                    throw new Exception();                                }                                // 중계기 명칭                                Excel_Repeater.NAME = Read_Data(ds, 4 + (j * 5), 5);                                // 중계기 명칭 없다면 예외                                if (Excel_Repeater.NAME == null || Excel_Repeater.NAME.Trim().Length == 0)                                {                                    Debug_Row = 4 + (j * 5) + 1;                                    Debug_Col = 5;                                    throw new Exception();                                }                                // 중계기 타입에 상관없이 무조건 4행 단위로 읽는다                                for (int k = 1; k <= 4; k++)                                {                                    // 중계기 행번호                                    RepeaterRowNum = 4 + (j * 5);                                    // 디바이스 아이디(중계기타입 아래칸)은 제대로된 순번을 넣어야한다                                    if (Read_Data(ds, RepeaterRowNum + k, 1) != k.ToString())                                    {                                        Debug_Row = 4 + (j * 5) + k + 1;                                        Debug_Col = 1;                                        throw new Exception();                                    }                                    ///                                    /// _Excel_Point 클래스 생성 (입력부)                                    ///                                    // 디바이스 명칭이 없다면 제외                                    if (ds.Tables[0].Rows[RepeaterRowNum + k][5] != null && ds.Tables[0].Rows[RepeaterRowNum + k][5].ToString().Length != 0)                                    {                                        string TempDeviceName = Read_Data(ds, RepeaterRowNum + k, 5);                                        TempDeviceName = TempDeviceName.Trim();                                        if (TempDeviceName != null && TempDeviceName.Length != 0)                                        {                                            _Excel_Point Excel_Point_Input = new _Excel_Point();                                            // 입력 포인트 타입                                            Excel_Point_Input.TYPE = POINT_TYPE.I;                                            // 입력 포인트 PortNum                                            Excel_Point_Input.PortNum = ds.Tables[0].Rows[RepeaterRowNum + k][1].ToString();                                            // 입력 포인트 위치 정보                                            Excel_Point_Input.Excel_Position.Building = Read_Data(ds, RepeaterRowNum + k, 2);                                            Excel_Point_Input.Excel_Position.Stair = Read_Data(ds, RepeaterRowNum + k, 3);                                            Excel_Point_Input.Excel_Position.Floor = Read_Data(ds, RepeaterRowNum + k, 4);                                            // 위치 코드 사용여부 체크                                            string Temp_Point_Position_Name = Code_Position_Name_Create(                                                Excel_Point_Input.Excel_Position.Building, Excel_Point_Input.Excel_Position.Stair, Excel_Point_Input.Excel_Position.Floor);                                            if (Code_Position_Enable_Check(Temp_Point_Position_Name) == false)                                            {                                                Debug_EtcMessage = _Text.FailDataInform_NotCodePostionName;                                                throw new Exception();                                            }                                            // 입력 포인트 명칭                                            Excel_Point_Input.NAME = TempDeviceName;                                            // 입력 포인트 코드                                            Excel_Point_Input.Code_FullName = Read_Data(ds, RepeaterRowNum + k, 6);                                            string[] TempCode = Excel_Point_Input.Code_FullName.Split(' ');                                            Excel_Point_Input.Code_Type = TempCode[0];                                            Excel_Point_Input.Code_Name = TempCode[1];                                            // 리스트에 추가                                            Excel_Repeater.List_Point.Add(Excel_Point_Input);                                        }                                    }                                    // 단, 명칭은 없지만, 코드가 존재하는 경우는 예외다                                    else                                    {                                        // 코드가 존재하는 경우                                        if (ds.Tables[0].Rows[RepeaterRowNum + k][6] != null && ds.Tables[0].Rows[RepeaterRowNum + k][6].ToString().Trim().Length != 0)                                        {                                            // 명칭이 없는 경우만                                            if (ds.Tables[0].Rows[RepeaterRowNum + k][5] == null || ds.Tables[0].Rows[RepeaterRowNum + k][5].ToString().Trim().Length == 0)                                            {                                                Debug_Row = RepeaterRowNum + k + 1;                                                Debug_Col = 5 + 1;                                                throw new Exception();                                            }                                        }                                    }                                    ///                                    /// _Excel_Point 클래스 생성 (출력부)                                    ///                                    // 디바이스 명칭이 없다면 제외                                    if (ds.Tables[0].Rows[RepeaterRowNum + k][7] != null && ds.Tables[0].Rows[RepeaterRowNum + k][7].ToString().Length != 0)                                    {                                        string TempDeviceName = Read_Data(ds, RepeaterRowNum + k, 7);                                        TempDeviceName = TempDeviceName.Trim();                                        if (TempDeviceName != null && TempDeviceName.Length != 0)                                        {                                            _Excel_Point Excel_Point_Output = new _Excel_Point();                                            // 출력 포인트 타입                                            Excel_Point_Output.TYPE = POINT_TYPE.O;                                            // 출력 포인트 PortNum                                            Excel_Point_Output.PortNum = ds.Tables[0].Rows[RepeaterRowNum + k][1].ToString();                                            // 출력 포인트 위치 정보                                            Excel_Point_Output.Excel_Position.Building = Read_Data(ds, RepeaterRowNum + k, 2);                                            Excel_Point_Output.Excel_Position.Stair = Read_Data(ds, RepeaterRowNum + k, 3);                                            Excel_Point_Output.Excel_Position.Floor = Read_Data(ds, RepeaterRowNum + k, 4);                                            // 위치 코드 사용여부 체크                                            string Temp_Point_Position_Name = Code_Position_Name_Create(                                                Excel_Point_Output.Excel_Position.Building, Excel_Point_Output.Excel_Position.Stair, Excel_Point_Output.Excel_Position.Floor);                                            if (Code_Position_Enable_Check(Temp_Point_Position_Name) == false)                                            {                                                Debug_EtcMessage = _Text.FailDataInform_NotCodePostionName;                                                throw new Exception();                                            }                                            // 출력 포인트 명칭                                            Excel_Point_Output.NAME = TempDeviceName;                                            // 출력 포인트 코드                                            Excel_Point_Output.Code_FullName = Read_Data(ds, RepeaterRowNum + k, 8);                                            string[] TempCode = Excel_Point_Output.Code_FullName.Split(' ');                                            Excel_Point_Output.Code_Type = TempCode[0];                                            Excel_Point_Output.Code_Name = TempCode[1];                                            // 리스트에 추가                                            Excel_Repeater.List_Point.Add(Excel_Point_Output);                                        }                                    }                                    // 단, 명칭은 없지만, 코드가 존재하는 경우는 예외다                                    else                                    {                                        // 코드가 존재하는 경우                                        if (ds.Tables[0].Rows[RepeaterRowNum + k][8] != null && ds.Tables[0].Rows[RepeaterRowNum + k][8].ToString().Trim().Length != 0)                                        {                                            // 명칭이 없는 경우만                                            if (ds.Tables[0].Rows[RepeaterRowNum + k][7] == null || ds.Tables[0].Rows[RepeaterRowNum + k][7].ToString().Trim().Length == 0)                                            {                                                Debug_Row = RepeaterRowNum + k + 1;                                                Debug_Col = 7 + 1;                                                throw new Exception();                                            }                                        }                                    }                                }                                // 리스트에 추가                                Excel_Sheet.List_Repeater.Add(Excel_Repeater);                            }                        }                        // 리스트에 추가                        _Data.List_ExcelPoint.Add(Excel_Sheet);                    }                }                ///                /// 3. 포인트 위치 정보에 따라 실제로 사용한는 위치 코드값을 재정리                /// 실제로 사용되는 위치코드만 재정리                ///                 Code_Postion_Create();                // 단, 엑셀시트 클래스안에 중계기클래스가 없다면 잘못된 포맷이다                int RepeterAllCount = 0;                foreach (_Excel_Sheet Excel_Sheet in _Data.List_ExcelPoint)                    foreach (_Excel_Repeater Excel_Repeater in Excel_Sheet.List_Repeater)                        RepeterAllCount++;                if (RepeterAllCount == 0)                {                    // 파일 포맷이 잘못되었습니다                    _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.FailFormatInform, 0);                    return false;                }                /////                ///// 4. 그룹 정보 저장                                /////                //if (Import_Point_GetGroup(worksheets, Connection) == false)                //{                //    // 연동그룹 시트가 잘못되었습니다                //    _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.FailGroupInform, 0);                //    return false;                //}                /////                ///// 5. 맵 정보 저장                                /////                //if (Import_Point_GetMap(worksheets, Connection) == false)                //{                //    // 연동설정 시트가 잘못되었습니다                //    _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 250, 150, _Text.FailMapInform, 0);                //    return false;                //}                // 엑셀 읽기 세션 해제                if (Connection != null) Connection.Close();                return true;            }            catch (Exception e)            {                string Error = " 시트명:" + Debug_SheetName + " 행:" + Debug_Row + " 열:" + Debug_Col;                // 추가 메세지가 필요한 경우                                string Message = null;                // 추가 메세지가 없는 경우에는 "데이타가 잘못되었습니다" 문구 출력                if (Debug_EtcMessage != null)                    Message = Debug_EtcMessage + Error;                else                    Message = _Text.FailDataInform + Error;                // 데이타가 잘못되었습니다                _Popup.Create(Popup_Type.Confirm, Popup_Style.Normal, _Text.Warnning, 600, 150, Message, 0);                // LOG                _Event.DebugView_SendMessage_Write(_Text.NotReadExcelFile + Error + " 의 정보를 확인해주세요 " + e.ToString());                // 엑셀 읽기 세션 해제                if (Connection != null) Connection.Close();                return false;            }        }        // Export          public static void Export_Point(string FileFullPath)        {        }    }}
 |