Public Class Frm_Macro2

    Dim fn As String = ""

    Dim 단위면적당신재생1차에너지합 As Decimal = 0
    Dim 단위면적당1차에너소비량합 As Decimal = 0
    Dim 에너지자립률 As Double = 0

    Public Sub New()

        ' 이 호출은 디자이너에 필요합니다.
        InitializeComponent()
        fn = ""
        ' InitializeComponent() 호출 뒤에 초기화 코드를 추가하십시오.

    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        LoadFile()
    End Sub

    Private Sub LoadFile()

        Dim od As New OpenFileDialog
        od.Filter = "excel|*.xls|*.*|*.*"
        od.FilterIndex = 1
        If (od.ShowDialog() <> Windows.Forms.DialogResult.OK) Then Return
        fn = od.FileName


        If Not System.IO.File.Exists(fn) Then
            MsgBox("업로드샘플파일(" + fn + ")가 존재하지 않습니다", MsgBoxStyle.Critical, "확인")
            Return
        End If

        Try
            If Me.FpSpread1.OpenExcel(fn) Then
                '// MakeData()
                '//첫줄에 열 번호를 넣는다.
                For col As Integer = 1 To 108
                    Dim oldvalue As Object = FpSpread1_Sheet1.Cells(0, col - 1).Value
                    If oldvalue Is Nothing Then
                        FpSpread1_Sheet1.Cells(0, col - 1).Value = "(" + col.ToString() + ")"
                    Else
                        FpSpread1_Sheet1.Cells(0, col - 1).Value = oldvalue.ToString() + "(" + col.ToString() + ")"
                    End If
                Next

                '//0번째열에서 1의 값을 찾고 그 이후의 값을 찾아서 번호를 설정한다.
                Dim StartIndex As Integer = 0
                Dim EndIndex As Integer = 0
                ProgressBar1.Minimum = 0
                ProgressBar1.Maximum = 10000
                ProgressBar1.Value = 0
                For i As Integer = 0 To 65535
                    If i >= ProgressBar1.Maximum - 1 Then
                        ProgressBar1.Value = ProgressBar1.Maximum
                    Else
                        ProgressBar1.Value += 1
                    End If

                    Dim curval As Object = FpSpread1_Sheet1.Cells(i, 0).Value
                    If curval Is Nothing Then
                        If StartIndex <> 0 Then
                            EndIndex = i - 1
                            Exit For
                        Else
                            Continue For
                        End If
                    End If

                    If curval.ToString() = "1" Then
                        StartIndex = i
                    ElseIf StartIndex <> 0 Then
                        If curval.ToString() = "" Then
                            EndIndex = i - 1
                            Exit For
                        End If
                    End If
                Next

                tbStart.Text = (StartIndex + 1).ToString()
                tbEnd.Text = (EndIndex + 1).ToString()
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "파일 불러오기 오류")
        End Try
    End Sub



    Private Function RData(grp As String, code As Integer) As Decimal
        Dim filter As String = String.Format("GRP='{0}' and code={1}", grp, code.ToString("000"))
        Dim DR() As DSR.TReqUseRow = DSETR1.TReqUse.Select(filter)
        If DR.GetUpperBound(0) = -1 Then Return 0
        Return DR(0).M00
    End Function



    Private Sub Frm_Upload_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Dim sd As New SaveFileDialog()
        sd.Filter = "Excel(*.xls)|*.xls"
        sd.FilterIndex = 0
        If sd.ShowDialog = Windows.Forms.DialogResult.OK Then
            Try
                If FpSpread1.SaveExcel(sd.FileName, FarPoint.Excel.ExcelSaveFlags.NoFlagsSet) Then
                    MsgBox("저장완료", MsgBoxStyle.Information, "확인")
                End If
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical, "error")
            End Try

        End If
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

        '//기본홤녀은 건물개요로
        MdiMain.Menu_건물개요()



        Dim StartNo As Integer = CInt(tbStart.Text)
        Dim EndNo As Integer = CInt(tbEnd.Text)
        Me.ProgressBar1.Value = 0
        Me.ProgressBar1.Minimum = 0
        Me.ProgressBar1.Maximum = EndNo - StartNo + 1

        If MsgBox("전체 실행전에 1건에대해서 테스트실행을 하시겠습니까?", MsgBoxStyle.Question Or MsgBoxStyle.YesNo, "확인") = MsgBoxResult.Yes Then
            EndNo = StartNo
        ElseIf MsgBox("전체 " + Me.ProgressBar1.Maximum.ToString() + "건의 자료를 실행하시겠습니까?" + vbCrLf + "이 작업은 중단할 수 없습니다", MsgBoxStyle.Question Or MsgBoxStyle.YesNo, "확인") <> MsgBoxResult.Yes Then
            Return
        End If

        For RowNum As Integer = StartNo To EndNo

            Me.ProgressBar1.Value += 1

            Dim Row = RowNum - 1
            Dim ColIDX As Integer = 1

            '//건물개요
            '//DSET1.tbl_Desc.Clear()
            Dim NewDesc As DS.tbl_DescRow = DSET1.tbl_Desc.Rows(0)
            NewDesc.cname = FpSpread1_Sheet1.Cells(Row, 1).Value.ToString()
            NewDesc.buildname = NewDesc.cname
            NewDesc.builds1 = 1 '//지하(층수)
            NewDesc.builds2 = 1 '//지상(층수)

            '//지역(해당하는이름의 코드를 가져와서 설정해야함)
            Dim 지역명 As String = FpSpread1_Sheet1.Cells(Row, 5).Value
            Dim 지역목록() As DataRow = DSET1.weather_group.Select(String.Format("name = '{0}'", 지역명))
            If 지역목록.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 지역({1})에 해당하는 데이터가 {2}건 있습니다", Row, 지역명, 지역목록.Length))
                Return
            End If
            NewDesc.buildarea = 지역목록(0)("code")
            NewDesc.EndEdit()
            'DSET1.tbl_Desc.Addtbl_DescRow(NewDesc)

            Dim Drows() As DataRow

            '//건물용도
            Dim 건물용도명 As String = FpSpread1_Sheet1.Cells(Row, 6).Value.ToString().Replace(vbLf, "").Replace(vbCr, "") '//건물용도
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1201' and name = '{0}'", 건물용도명))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 건물용도({1})에 해당하는 데이터가 {2}건 있습니다", Row, 건물용도명, Drows.Length))
                Return
            End If
            NewDesc.isjugo = Drows(0)("valn1")
            NewDesc.EndEdit()

            '//입력존
            DSET1.tbl_zone.Clear()

            '/없음데이터도 생성해야한다.
            Dim drZoneNull As DS.tbl_zoneRow = DSET1.tbl_zone.Newtbl_zoneRow
            drZoneNull.code = "0"
            drZoneNull.설명 = "(없음)"
            DSET1.tbl_zone.Addtbl_zoneRow(drZoneNull)

            Dim DrZone As DS.tbl_zoneRow = DSET1.tbl_zone.Newtbl_zoneRow
            DrZone.code = "00001"
            DrZone.조명부하산출방법 = "입력치"
            DrZone.설명 = "입력존(매크로)"
            DrZone.그룹 = "0"
            DrZone.sortkey = DrZone.code

            DrZone.열생산난방생산기기 = "00001" '//난방기기 임시로 적용처리함()
            DrZone.열생산급탕생산기기 = "00001" '//급탕기기 임시로 적용처리함()
            DrZone.냉난방열공급시스템 = "00001" '//열공급시스템연결
            DrZone.냉난방열공급시스템수 = "1"
            DrZone.냉난방공조처리시스템 = "00001"
            DrZone.인공광원 = "(없음)"
            DrZone.조명방식 = "(없음)"
            DrZone.외기부하처리여부 = "아니오"

            DrZone.설명 = FpSpread1_Sheet1.Cells(Row, 7).Value
            Dim 사용프로필 As String = FpSpread1_Sheet1.Cells(Row, 8).Value
            Drows = DSET1.tbl_profile.Select(String.Format("설명 like '%{0}'", 사용프로필))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 입력존-사용프로필({1})에 해당하는 데이터가 {2}건 있습니다", Row, 사용프로필, Drows.Length))
                Return
            End If
            DrZone.프로필 = Drows(0)("code")
            DrZone.면적 = FpSpread1_Sheet1.Cells(Row, 9).Value
            DrZone.천장고p = FpSpread1_Sheet1.Cells(Row, 10).Value
            DrZone.순실체적 = FpSpread1_Sheet1.Cells(Row, 11).Value

            Dim 열저장능력 As String = FpSpread1_Sheet1.Cells(Row, 12).Value
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1023' and name = '{0}'", 열저장능력))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 입력존-열저장능력({1})에 해당하는 데이터가 {2}건 있습니다", Row, 열저장능력, Drows.Length))
                Return
            End If
            DrZone.열저장능력 = Drows(0)("Name")

            Dim 열교가산치 As String = FpSpread1_Sheet1.Cells(Row, 13).Value
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1022' and name = '{0}'", 열교가산치))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 입력존-열교가산치({1})에 해당하는 데이터가 {2}건 있습니다", Row, 열교가산치, Drows.Length))
                Return
            End If
            DrZone.열교가산치 = Drows(0)("Name")
            DrZone.침기율 = FpSpread1_Sheet1.Cells(Row, 14).Value

            Dim 냉난방방식 As String = FpSpread1_Sheet1.Cells(Row, 15).Value
            If 냉난방방식 = "없음" Then 냉난방방식 = "기능없음"
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1000' and name = '{0}'", 냉난방방식))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 입력존-냉난방방식({1})에 해당하는 데이터가 {2}건 있습니다", Row, 냉난방방식, Drows.Length))
                Return
            End If
            DrZone.냉난방방식 = Drows(0)("name")

            Dim 냉난방공조 As String = FpSpread1_Sheet1.Cells(Row, 16).Value
            If 냉난방공조 = "없음" Then 냉난방공조 = "기능없음"
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1001' and name = '{0}'", 냉난방공조))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 입력존-냉난방공조({1})에 해당하는 데이터가 {2}건 있습니다", Row, 냉난방공조, Drows.Length))
                Return
            End If
            DrZone.냉난방공조 = Drows(0)("name")

            Dim 조명부하산출방법 As String = FpSpread1_Sheet1.Cells(Row, 17).Value
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1031' and name = '{0}'", 조명부하산출방법))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 입력존-조명부하산출방법({1})에 해당하는 데이터가 {2}건 있습니다", Row, 조명부하산출방법, Drows.Length))
                Return
            End If
            DrZone.조명부하산출방법 = Drows(0)("name")
            DrZone.조명에너지부하율입력치 = FpSpread1_Sheet1.Cells(Row, 18).Value
            DSET1.tbl_zone.Addtbl_zoneRow(DrZone)


            '//입력면
            Dim 방위목록 As New List(Of String)
            방위목록.AddRange({"북서", "서", "남서", "남", "남동", "동", "북동", "북", "수평", "일사없음", "(없음)"})

            Dim 제목1 As String = ""
            Dim 제목2 As String = ""
            DSET1.tbl_myoun.Clear()
            For i As Integer = 0 To 12
                Dim NewMyoun As DS.tbl_myounRow = DSET1.tbl_myoun.Newtbl_myounRow
                NewMyoun.존분류 = DrZone.code
                NewMyoun.code = String.Format("{0:00000}", i + 1)
                NewMyoun.sortkey = NewMyoun.code




                Dim t1 As String = FpSpread1_Sheet1.Cells(2, 19 + (i * 2)).Value '//타이틀
                Dim t2 As String = FpSpread1_Sheet1.Cells(3, 19 + (i * 2)).Value '//타이틀

                If Not String.IsNullOrEmpty(t1) Then 제목1 = t1
                If Not String.IsNullOrEmpty(t2) Then 제목2 = t2

                NewMyoun.설명 = 제목1 + ":" + 제목2

                '//공용코드 1067에서 name 이 일치하는 데이터가 있어야한다.
                '//(없음),외벽,외부창,내벽,간벽,내부창
                If i = 0 Then
                    NewMyoun.건축부위방식 = "외벽"
                ElseIf i = 1 Then
                    NewMyoun.건축부위방식 = "외벽"
                ElseIf i = 2 Then
                    NewMyoun.건축부위방식 = "내벽"
                ElseIf i = 3 Then
                    NewMyoun.건축부위방식 = "내벽"
                ElseIf i = 4 Then
                    NewMyoun.건축부위방식 = "외벽"
                ElseIf i = 5 Then '//코어
                    NewMyoun.건축부위방식 = "내벽"
                ElseIf i = 6 Then  '//쎼떄깐뼊(쪠외)
                    NewMyoun.건축부위방식 = "간벽"
                ElseIf i = 7 Or i = 8 Then
                    NewMyoun.건축부위방식 = "외부창"
                ElseIf i = 9 Or i = 10 Or i = 11 Or i = 12 Then
                    NewMyoun.건축부위방식 = "내부창"
                End If

                Dim 방위1 As String = FpSpread1_Sheet1.Cells(Row, 19 + (i * 2)).Value '//타이틀
                방위1 = 방위1.ToString().Replace(vbLf, "").Replace(vbCr, "")
                If 방위목록.IndexOf(방위1) = -1 Then
                    MsgBox(String.Format("{0}번줄 입력면-방위1({1})에 해당하는 데이터가 없습니다.", Row, 방위1))
                    Return
                End If
                NewMyoun.방위 = 방위1
                NewMyoun.건축부위면적 = FpSpread1_Sheet1.Cells(Row, 20 + (i * 2)).Value
                DSET1.tbl_myoun.Addtbl_myounRow(NewMyoun)
            Next

            '//지붕 (45)
            Dim NewM지붕 As DS.tbl_myounRow = DSET1.tbl_myoun.Newtbl_myounRow
            NewM지붕.존분류 = DrZone.code
            NewM지붕.code = String.Format("{0:00000}", 14)
            NewM지붕.sortkey = NewM지붕.code
            NewM지붕.방위 = "수평"
            NewM지붕.건축부위방식 = "외벽"
            NewM지붕.건축부위면적 = FpSpread1_Sheet1.Cells(Row, 45).Value
            DSET1.tbl_myoun.Addtbl_myounRow(NewM지붕)

            '//바닥 (46)
            Dim NewM바닥 As DS.tbl_myounRow = DSET1.tbl_myoun.Newtbl_myounRow
            NewM바닥.존분류 = DrZone.code
            NewM바닥.code = String.Format("{0:00000}", 15)
            NewM바닥.sortkey = NewM지붕.code
            NewM바닥.방위 = "일사없음"
            NewM바닥.건축부위방식 = "외벽"
            NewM바닥.건축부위면적 = FpSpread1_Sheet1.Cells(Row, 46).Value
            DSET1.tbl_myoun.Addtbl_myounRow(NewM바닥)

            '//공조처리
            DSET1.tbl_kongjo.Clear()
            Dim New공조 As DS.tbl_kongjoRow = DSET1.tbl_kongjo.Newtbl_kongjoRow
            New공조.code = "00001"
            New공조.팬효율산출방식 = "계산치"
            New공조.설명 = "공조기기"
            New공조.설정치난방 = "0"
            New공조.설정치냉방 = "0"
            New공조.최대풍량 = "0"

            New공조.리턴공기혼합여부 = "아니오"
            New공조.가습기유형 = "(없음)"
            New공조.외기냉방제어유무 = "무"
            New공조.열교환기유형 = "(없음)"

            New공조.열회수율 = "0"
            New공조.열회수율냉 = "공조기기"
            New공조.급기풍량 = "0"
            New공조.배기풍량 = "0"
            New공조.급기팬동력 = "0"
            New공조.배기팬동력 = "0"
            New공조.총압력손실급기팬 = "0"
            New공조.총압력손실배기팬 = "0"
            New공조.총효율급기팬 = "0"
            New공조.총효율배기팬 = "0"


            Dim 공조방식 As String = FpSpread1_Sheet1.Cells(Row, 47).Value
            If 공조방식 = "없음" Then 공조방식 = "(없음)"
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1026' and name = '{0}'", 공조방식))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 공조처리-공조방식({1})에 해당하는 데이터가 {2}건 있습니다", Row, 공조방식, Drows.Length))
                Return
            End If
            New공조.공조방식 = Drows(0)("name")
            DSET1.tbl_kongjo.Addtbl_kongjoRow(New공조)

            '//난방기기
            DSET1.tbl_nanbangkiki.Clear()
            ColIDX = 48


            Dim New난방 As DS.tbl_nanbangkikiRow = DSET1.tbl_nanbangkiki.Newtbl_nanbangkikiRow
            New난방.code = "00001"
            New난방.설명 = "보일러"
            New난방.신재생연결여부 = "연결없음"
            New난방.보일러대수 = "1"

            Dim 난방_열생산기기방식 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1020' and name = '{0}'", 난방_열생산기기방식))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방기기-열생산기기방식({1})에 해당하는 데이터가 {2}건 있습니다", Row, 난방_열생산기기방식, Drows.Length))
                Return
            End If
            New난방.열생산기기방식 = Drows(0)("name")

            Dim 난방_사용연료 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1021' and name = '{0}'", 난방_사용연료))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방기기-사용연료({1})에 해당하는 데이터가 {2}건 있습니다", Row, 난방_사용연료, Drows.Length))
                Return
            End If
            New난방.사용연료 = Drows(0)("name")

            New난방.보일러정격출력 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            New난방.급수온도 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            New난방.환수온도 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1

            Dim 난방생산기기운전방식 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1035' and name = '{0}'", 난방생산기기운전방식))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방기기-난방생산기기운전방식({1})에 해당하는 데이터가 {2}건 있습니다", Row, 난방생산기기운전방식, Drows.Length))
                Return
            End If
            New난방.운전방식 = Drows(0)("name")


            Dim 난방_열원기기_보일러방식 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            If 난방_열원기기_보일러방식.IndexOf("보일러") = -1 Then 난방_열원기기_보일러방식 += "보일러"
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1036' and name = '{0}'", 난방_열원기기_보일러방식))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방기기-열원기기_보일러방식({1})에 해당하는 데이터가 {2}건 있습니다", Row, 난방_열원기기_보일러방식, Drows.Length))
                Return
            End If
            New난방.보일러방식 = Drows(0)("name")
            New난방.정격보일러효율 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1

            Dim 난방_축열탱크방식 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1039' and name = '{0}'", 난방_축열탱크방식))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방기기-급탕축열탱크방식({1})에 해당하는 데이터가 {2}건 있습니다", Row, 난방_축열탱크방식, Drows.Length))
                Return
            End If
            New난방.축열탱크방식 = Drows(0)("name")


            Dim 난방_급탕_시스템방식 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1042' and name = '{0}'", 난방_급탕_시스템방식))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방기기-급탕_시스템방식({1})에 해당하는 데이터가 {2}건 있습니다", Row, 난방_급탕_시스템방식, Drows.Length))
                Return
            End If
            New난방.분배시스템방식 = Drows(0)("name")

            '//입력존에서 열생산기기 급탕이 연결되지 않았다.
            '//순환무우를 비롯 급탕기기를 사용하려면 급탕기기가 연결되어야한다.
            Dim 난방_급탕_순환유무 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1032' and name = '{0}'", 난방_급탕_순환유무))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방기기-급탕_순환유무({1})에 해당하는 데이터가 {2}건 있습니다", Row, 난방_급탕_순환유무, Drows.Length))
                Return
            End If
            New난방.순환유무 = Drows(0)("name")


            Dim 난방_급탕_펌프제어 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1043' and name = '{0}'", 난방_급탕_펌프제어))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방기기-급탕_펌프제어({1})에 해당하는 데이터가 {2}건 있습니다", Row, 난방_급탕_펌프제어, Drows.Length))
                Return
            End If
            New난방.펌프제어 = Drows(0)("name")
            New난방.펌프동력급탕 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1

            Dim 난방_배관망유형 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1040' and name = '{0}'", 난방_배관망유형))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방기기-배관망유형({1})에 해당하는 데이터가 {2}건 있습니다", Row, 난방_배관망유형, Drows.Length))
                Return
            End If
            New난방.배관망유형 = Drows(0)("name")

            Dim 난방_펌프감소계수 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1002' and name = '{0}'", 난방_펌프감소계수))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방기기-펌프감소계수({1})에 해당하는 데이터가 {2}건 있습니다", Row, 난방_펌프감소계수, Drows.Length))
                Return
            End If
            New난방.펌프교정계수 = Drows(0)("name")


            Dim 난방_펌프제어유형 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1041' and name = '{0}'", 난방_펌프제어유형))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방기기-펌프제어유형({1})에 해당하는 데이터가 {2}건 있습니다", Row, 난방_펌프제어유형, Drows.Length))
                Return
            End If
            New난방.펌프제어유형 = Drows(0)("name")
            New난방.펌프동력급탕 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            DSET1.tbl_nanbangkiki.Addtbl_nanbangkikiRow(New난방)

            '//난방공급시스템
            DSET1.tbl_kongkub.Clear()
            Dim New공급 As DS.tbl_kongkubRow = DSET1.tbl_kongkub.Newtbl_kongkubRow
            New공급.code = "00001"
            New공급.설명 = "난방공급"
            New공급.제어기의정격전력 = "0"
            New공급.팬송풍기정격전력 = "0"
            New공급.펌프정격전력 = "0"
            New공급.팬송풍기수 = "0"
            New공급.추가펌프수 = "0"

            Dim 난방공급시스템 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1045' and name = '{0}'", 난방공급시스템))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방공급-시스템({1})에 해당하는 데이터가 {2}건 있습니다", Row, 난방공급시스템, Drows.Length))
                Return
            End If
            New공급.열공급시스템 = Drows(0)("name")

            Dim 열공급생산기기 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_nanbangkiki.Select(String.Format("설명 = '{0}'", 열공급생산기기))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방공급-열공급생산시기({1})에 해당하는 데이터가 {2}건 있습니다", Row, 열공급생산기기, Drows.Length))
                Return
            End If
            New공급.열공급생산기기 = Drows(0)("code")

            Dim 바닥난방열제어 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1033' and name = '{0}'", 바닥난방열제어))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방공급-바닥난방열제어({1})에 해당하는 데이터가 {2}건 있습니다", Row, 바닥난방열제어, Drows.Length))
                Return
            End If
            New공급.바닥난방열제어 = Drows(0)("name")

            Dim 바닥난방열건축부위 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1034' and name = '{0}'", 바닥난방열건축부위))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 난방공급-바닥난방열건축부위({1})에 해당하는 데이터가 {2}건 있습니다", Row, 바닥난방열건축부위, Drows.Length))
                Return
            End If
            New공급.바닥난방열건축부위 = Drows(0)("name")
            DSET1.tbl_kongkub.Addtbl_kongkubRow(New공급)

            '//냉방기기
            DSET1.tbl_nangbangkiki.Clear()
            Dim New냉방 As DS.tbl_nangbangkikiRow = DSET1.tbl_nangbangkiki.Newtbl_nangbangkikiRow
            New냉방.code = "00001"
            New냉방.설명 = "냉방기기"
            New냉방.신재생연결여부 = "연결없음"

            Dim 냉동기방식 As String = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            If 냉동기방식 = "없음" Then 냉동기방식 = "(없음)"
            Drows = DSET1.tbl_common.Select(String.Format("gubun='1046' and name = '{0}'", 냉동기방식))
            If Drows.Length <> 1 Then
                MsgBox(String.Format("{0}번줄 냉방기기-냉동기방식({1})에 해당하는 데이터가 {2}건 있습니다", Row, 냉동기방식, Drows.Length))
                Return
            End If
            New냉방.냉동기방식 = Drows(0)("name")
            New냉방.냉동기용량 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            New냉방.열성능비 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value : ColIDX += 1
            If Not IsNumeric(New냉방.냉동기용량) Then New냉방.냉동기용량 = "0"
            If Not IsNumeric(New냉방.열성능비) Then New냉방.열성능비 = "0"
            DSET1.tbl_nangbangkiki.Addtbl_nangbangkikiRow(New냉방)

            '//열관류율
            '//면형태를 입력해야함 이것은 공용코드 1088에 들어있으며 코드형태로 들어간다
            '//외벽(벽체),외벽(지붕),외벽(바닥),내벽(벽체),내벽(지붕),내벽(바닥),간벽,외부창,내부창,지중벽
            DSET1.tbl_yk.Clear()

            '//직접면하는
            For Each dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("건축부위방식='외벽'")
                dr면.열관류율 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value
            Next : ColIDX += 1

            '//간접면하는
            For Each dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("건축부위방식='내벽'")
                dr면.열관류율 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value
            Next : ColIDX += 1

            '//바닥
            For Each dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("건축부위방식='외벽' and 방위='일사없음'") '//2018.04.24 수정
                dr면.열관류율 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value
            Next : ColIDX += 1

            '//지붕벽체
            For Each dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("건축부위방식='외벽' and 방위='수평'") '//2018.04.24 수정
                dr면.열관류율 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value
            Next : ColIDX += 1

            '//현관문
            For Each dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("건축부위방식='내부창' and 방위='일사없음'") '//2018.04.24 수정
                dr면.투과율 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value
                dr면.열관류율 = FpSpread1_Sheet1.Cells(Row, ColIDX + 1).Value
            Next : ColIDX += 2

            '//확장창
            For Each dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("건축부위방식='외부창'")
                dr면.투과율 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value
                dr면.열관류율 = FpSpread1_Sheet1.Cells(Row, ColIDX + 1).Value
            Next : ColIDX += 2

            '//세대창
            For Each dr면 As DS.tbl_myounRow In DSET1.tbl_myoun.Select("건축부위방식='내부창' and 방위<>'일사없음'") '//2018.04.24 수정
                dr면.투과율 = FpSpread1_Sheet1.Cells(Row, ColIDX).Value
                dr면.열관류율 = FpSpread1_Sheet1.Cells(Row, ColIDX + 1).Value
            Next : ColIDX += 2

            '//입력면의 자료를 업데이트해준다.


            DSET1.AcceptChanges()

            '//계산실행
            Run_Calc(Row)
        Next

        If Not msgf Is Nothing Then
            msgf.Close()
            msgf.Dispose()
            msgf = Nothing
        End If

        If StartNo = EndNo Then
            Report_그래프.Visible = False
            Report_그래프.Show()
        End If

    End Sub

    Sub Run_Calc(Row As Integer)

        '//현재데이터상태를 저장
        DSET1.AcceptChanges()
        DSETR1.AcceptChanges()

        Dim Type As Calculator.ECalc = Calculator.ECalc.All   '//요구량+소요량
        Dim showmsg As String = ""  '//추가표시메세지
        Dim St As Date = Now    '//계산시작

        pLog.Add(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
        pLog.Add(String.Format("계산실행({0})", Type.ToString()))
        pLog.Add(String.Format("시작시간 : {0}", St.ToString()))
        pLog.Add("----------------------------------")

        Dim Result As Boolean = Calc.Start(showmsg, Type, LogSB, 0)
        Dim Ts As TimeSpan = Now - St   '//계산경과시간을 표시해준다.
        Dim calc_ok As Integer = 0
        If Result Then   '//파라미터 True 라면 소요량이 추가로 게산된다.
            Calc.Summary.All()
            If LogSB.ToString <> "" Then
                FpSpread1_Sheet1.Cells(Row, 97).Value = LogSB.ToString
            Else
                FpSpread1_Sheet1.Cells(Row, 97).Value = "시간:" + Ts.ToString()
                calc_ok = 1 '================================2014.04.17 계산이 완료되면 그래프를 보여줌
            End If
        Else
            FpSpread1_Sheet1.Cells(Row, 97).Value = LogSB.ToString
        End If

        '//상태메세지창이 열려있다면 제거해준다.

        If calc_ok = 1 Then
            '//해당값을 기록한다.
            Extract_Data(Row)
        Else
            '//빈값으로 기록을 한다.
            Dim StartIDX As Integer = 100
            For idx As Integer = StartIDX To StartIDX + 13
                FpSpread1_Sheet1.Cells(Row, idx).Value = "--"
            Next
        End If
    End Sub

    Sub Extract_Data(Row As Integer)
        Dim 신재생에너지 As Decimal
        Dim 난방에너지 As Decimal
        Dim 냉방에너지 As Decimal
        Dim 급탕에너지 As Decimal
        Dim 조명에너지 As Decimal
        Dim 환기에너지 As Decimal
        'Dim 합계 As Decimal

        Dim BaseIndex As Integer = 90
        Dim Dr2 As DSR.Graph_ReqUseRow
        For Gubun As Short = 0 To 4
            Select Case Gubun
                Case 0  '//1차에너지소요량

                    Dim Sum As Decimal = (Result1.생산E(0).태양광전력생산량 + Result1.생산E(0).신재생열병합전력생산량) / (Result1.일차E소요량(0).난방전력 + Result1.일차E소요량(0).냉방전력 + Result1.일차E소요량(0).급탕전력 + Result1.일차E소요량(0).조명전력 + Result1.일차E소요량(0).환기전력)

                    Dim 난방 As Decimal = Sum * Result1.일차E소요량(0).난방전력  '//아마게산이안도잇으니 여기값들이 0이잇을거에요.
                    Dim 냉방 As Decimal = Sum * Result1.일차E소요량(0).냉방전력
                    Dim 조명 As Decimal = Sum * Result1.일차E소요량(0).조명전력
                    Dim 급탕 As Decimal = Sum * Result1.일차E소요량(0).급탕전력
                    Dim 환기 As Decimal = Sum * Result1.일차E소요량(0).환기전력

                    Dim 난방면적 As Decimal = 0
                    Dim 냉방면적 As Decimal = 0
                    Dim 조명면적 As Decimal = 0
                    Dim 급탕면적 As Decimal = 0
                    Dim 환기면적 As Decimal = 0
                    If Result1.사용면적.H <> 0 Then
                        난방면적 = TOSG(IIf(난방 = 0, 0, 난방 / Result1.사용면적.H))
                    End If
                    If Result1.사용면적.C <> 0 Then
                        냉방면적 = TOSG(IIf(냉방 = 0, 0, 냉방 / Result1.사용면적.C))
                    End If
                    If Result1.사용면적.L <> 0 Then
                        조명면적 = TOSG(IIf(조명 = 0, 0, 조명 / Result1.사용면적.L))
                    End If
                    If Result1.사용면적.W <> 0 Then
                        급탕면적 = TOSG(IIf(급탕 = 0, 0, 급탕 / Result1.사용면적.W))
                    End If
                    If Result1.사용면적.V <> 0 Then
                        환기면적 = TOSG(IIf(환기 = 0, 0, 환기 / Result1.사용면적.V))
                    End If

                    Dim 전기 As Decimal = 난방면적 + 냉방면적 + 조명면적 + 급탕면적 + 환기면적

                    '//열병합신재생에너지추가 130831 arin
                    신재생에너지 = -1 * (Result1.생산E(0).면적당생산량태양열 + Result1.생산E(0).신재생면적당열생산량 + Result1.생산E(0).면적당생산량지열 + 전기 * 2.75)

                    '//1차에너지소요량
                    난방에너지 = Result1.일차E소요량(0).난방면적
                    냉방에너지 = Result1.일차E소요량(0).냉방면적
                    급탕에너지 = Result1.일차E소요량(0).급탕면적
                    조명에너지 = Result1.일차E소요량(0).조명면적
                    환기에너지 = Result1.일차E소요량(0).환기면적
                    FpSpread1_Sheet1.Cells(Row, BaseIndex).Value = 난방에너지 + 냉방에너지 + 급탕에너지 + 조명에너지 + 환기에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 8).Value = 난방에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 9).Value = 냉방에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 10).Value = 급탕에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 11).Value = 조명에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 12).Value = 환기에너지

                Case 1  '//에너지소요량

                    Dim Sum As Decimal = (Result1.생산E(0).태양광전력생산량 + Result1.생산E(0).신재생열병합전력생산량) / (Result1.일차E소요량(0).난방전력 + Result1.일차E소요량(0).냉방전력 + Result1.일차E소요량(0).급탕전력 + Result1.일차E소요량(0).조명전력 + Result1.일차E소요량(0).환기전력)

                    Dim 난방 As Decimal = Sum * Result1.일차E소요량(0).난방전력  '//아마게산이안도잇으니 여기값들이 0이잇을거에요.
                    Dim 냉방 As Decimal = Sum * Result1.일차E소요량(0).냉방전력
                    Dim 조명 As Decimal = Sum * Result1.일차E소요량(0).조명전력
                    Dim 급탕 As Decimal = Sum * Result1.일차E소요량(0).급탕전력
                    Dim 환기 As Decimal = Sum * Result1.일차E소요량(0).환기전력

                    Dim 난방면적 As Decimal = 0
                    Dim 냉방면적 As Decimal = 0
                    Dim 조명면적 As Decimal = 0
                    Dim 급탕면적 As Decimal = 0
                    Dim 환기면적 As Decimal = 0
                    If Result1.사용면적.H <> 0 Then
                        난방면적 = TOSG(IIf(난방 = 0, 0, 난방 / Result1.사용면적.H))
                    End If
                    If Result1.사용면적.C <> 0 Then
                        냉방면적 = TOSG(IIf(냉방 = 0, 0, 냉방 / Result1.사용면적.C))
                    End If
                    If Result1.사용면적.L <> 0 Then
                        조명면적 = TOSG(IIf(조명 = 0, 0, 조명 / Result1.사용면적.L))
                    End If
                    If Result1.사용면적.W <> 0 Then
                        급탕면적 = TOSG(IIf(급탕 = 0, 0, 급탕 / Result1.사용면적.W))
                    End If
                    If Result1.사용면적.V <> 0 Then
                        환기면적 = TOSG(IIf(환기 = 0, 0, 환기 / Result1.사용면적.V))
                    End If

                    Dim 면적 As Decimal = 난방면적 + 냉방면적 + 조명면적 + 급탕면적 + 환기면적

                    '//열병합신재생에너지추가 130831 arin
                    신재생에너지 = -1 * (Result1.생산E(0).면적당생산량태양열 + Result1.생산E(0).신재생면적당열생산량 + Result1.생산E(0).면적당생산량지열) - 면적
                    난방에너지 = Result1.E소요량(0).난방면적
                    냉방에너지 = Result1.E소요량(0).냉방면적
                    급탕에너지 = Result1.E소요량(0).급탕면적
                    조명에너지 = Result1.E소요량(0).조명면적
                    환기에너지 = Result1.E소요량(0).환기면적
                    FpSpread1_Sheet1.Cells(Row, BaseIndex - 1).Value = 난방에너지 + 냉방에너지 + 급탕에너지 + 조명에너지 + 환기에너지

                    FpSpread1_Sheet1.Cells(Row, BaseIndex - 8).Value = 난방에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex - 7).Value = 냉방에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex - 6).Value = 급탕에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex - 5).Value = 조명에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex - 4).Value = 환기에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex - 3).Value = 신재생에너지


                Case 2  '//에너지요구량

                    신재생에너지 = 0
                    난방에너지 = Result1.E요구량(0).난방면적
                    냉방에너지 = Result1.E요구량(0).냉방면적
                    급탕에너지 = Result1.E요구량(0).급탕면적
                    조명에너지 = Result1.E요구량(0).조명면적
                    환기에너지 = 0
                    FpSpread1_Sheet1.Cells(Row, BaseIndex - 2).Value = 난방에너지 + 냉방에너지 + 급탕에너지 + 조명에너지 + 환기에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 3).Value = 난방에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 4).Value = 냉방에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 5).Value = 급탕에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 6).Value = 조명에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 7).Value = 환기에너지

                Case 3  '//co2발생량

                    신재생에너지 = 0
                    난방에너지 = Result1.Co2발생량(0).난방면적
                    냉방에너지 = Result1.Co2발생량(0).냉방면적
                    급탕에너지 = Result1.Co2발생량(0).급탕면적
                    조명에너지 = Result1.Co2발생량(0).조명면적
                    환기에너지 = Result1.Co2발생량(0).환기면적
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 1).Value = 난방에너지 + 냉방에너지 + 급탕에너지 + 조명에너지 + 환기에너지

                Case 4  '//1차에너지소요량(+계수) + 131020 

                    신재생에너지 = 0
                    If (Result1.사용면적.H_WF = 0) Then
                        난방에너지 = 0
                    Else
                        난방에너지 = Result1.일차E소요량(0).난방면적2 * Result1.사용면적.H / Result1.사용면적.H_WF
                    End If
                    If (Result1.사용면적.C_WF = 0) Then
                        냉방에너지 = 0
                    Else
                        냉방에너지 = TOSG(Result1.일차E소요량(0).냉방면적 * Result1.사용면적.C / Result1.사용면적.C_WF)
                    End If
                    If (Result1.사용면적.W_WF = 0) Then
                        급탕에너지 = 0
                    Else
                        급탕에너지 = Result1.일차E소요량(0).급탕면적2 * Result1.사용면적.W / Result1.사용면적.W_WF
                    End If
                    If (Result1.사용면적.L_WF = 0) Then
                        조명에너지 = 0
                    Else
                        조명에너지 = Result1.일차E소요량(0).조명면적 * Result1.사용면적.L / Result1.사용면적.L_WF
                    End If
                    If (Result1.사용면적.V_WF = 0) Then
                        환기에너지 = 0
                    Else
                        환기에너지 = Result1.일차E소요량(0).환기면적 * Result1.사용면적.V / Result1.사용면적.V_WF
                    End If

                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 2).Value = 난방에너지 + 냉방에너지 + 급탕에너지 + 조명에너지 + 환기에너지

                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 13).Value = 난방에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 14).Value = 냉방에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 15).Value = 급탕에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 16).Value = 조명에너지
                    FpSpread1_Sheet1.Cells(Row, BaseIndex + 17).Value = 환기에너지


            End Select
        Next
    End Sub
End Class