Public Class Frm_Macro

    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 100
                    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

    Function 방위변환(기존값 As String, 옵셋 As String) As String
        Dim 최종값 As String = 기존값
        Select Case 옵셋
            Case "0도"
                Select Case 기존값
                    Case "동"
                    Case "서"
                    Case "남"
                    Case "북"
                End Select
            Case "90도"
                Select Case 기존값
                    Case "동"
                        최종값 = "남"
                    Case "서"
                        최종값 = "북"
                    Case "남"
                        최종값 = "서"
                    Case "북"
                        최종값 = "동"
                    Case "남동"
                        최종값 = "남서"
                    Case "남서"
                        최종값 = "북서"
                    Case "북동"
                        최종값 = "남동"
                    Case "북서"
                        최종값 = "북동"
                End Select
            Case "180도"
                Select Case 기존값
                    Case "동"
                        최종값 = "서"
                    Case "서"
                        최종값 = "동"
                    Case "남"
                        최종값 = "북"
                    Case "북"
                        최종값 = "남"
                    Case "남동"
                        최종값 = "북서"
                    Case "남서"
                        최종값 = "북동"
                    Case "북동"
                        최종값 = "남서"
                    Case "북서"
                        최종값 = "남동"
                End Select
            Case "270도"
                Select Case 기존값
                    Case "동"
                        최종값 = "북"
                    Case "서"
                        최종값 = "남"
                    Case "남"
                        최종값 = "동"
                    Case "북"
                        최종값 = "서"
                    Case "남동"
                        최종값 = "북동"
                    Case "남서"
                        최종값 = "남동"
                    Case "북동"
                        최종값 = "북서"
                    Case "북서"
                        최종값 = "남서"
                End Select
        End Select
        Return 최종값
    End Function

    Function 공용코드값(구분 As String, 코드 As String) As String

        Dim 결과 As String = 코드
        Dim datas As DS.tbl_commonRow() = DSET1.tbl_common.Select("gubun='" + 구분 + "' and code='" + 코드 + "'")
        If datas.Length = 1 Then
            결과 = datas(0).name
        End If
        Return 결과
    End Function

    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)
            Dim 회전방향 As String = FpSpread1_Sheet1.Cells(Row, 2).Value.ToString()
            For i As Integer = 0 To DSET1.tbl_myoun.Rows.Count - 1
                Dim dr As DS.tbl_myounRow = DSET1.tbl_myoun.Rows(i)
                dr.방위 = 방위변환(dr.방위, 회전방향)
                dr.EndEdit()
            Next

            Dim 열관외벽직접 As String = FpSpread1_Sheet1.Cells(Row, 3).Value.ToString()
            For i As Integer = 0 To DSET1.tbl_yk.Rows.Count - 1
                Dim dr As DS.tbl_ykRow = DSET1.tbl_yk.Rows(i)
                If 공용코드값("1088", dr.면형태) <> "외벽(벽체)" Then Continue For
                dr.열관류율 = 열관외벽직접
                dr.EndEdit()
            Next
            Dim 열관외벽간접 As String = FpSpread1_Sheet1.Cells(Row, 4).Value.ToString()
            For i As Integer = 0 To DSET1.tbl_yk.Rows.Count - 1
                Dim dr As DS.tbl_ykRow = DSET1.tbl_yk.Rows(i)
                If 공용코드값("1088", dr.면형태) <> "내벽(벽체)" Then Continue For
                dr.열관류율 = 열관외벽간접
                dr.EndEdit()
            Next
            Dim 열관지붕직접 As String = FpSpread1_Sheet1.Cells(Row, 5).Value.ToString()
            For i As Integer = 0 To DSET1.tbl_yk.Rows.Count - 1
                Dim dr As DS.tbl_ykRow = DSET1.tbl_yk.Rows(i)
                If 공용코드값("1088", dr.면형태) <> "외벽(지붕)" Then Continue For
                dr.열관류율 = 열관지붕직접
                dr.EndEdit()
            Next
            Dim 열관지붕간접 As String = FpSpread1_Sheet1.Cells(Row, 6).Value.ToString()
            For i As Integer = 0 To DSET1.tbl_yk.Rows.Count - 1
                Dim dr As DS.tbl_ykRow = DSET1.tbl_yk.Rows(i)
                If 공용코드값("1088", dr.면형태) <> "내벽(지붕)" Then Continue For
                dr.열관류율 = 열관지붕간접
                dr.EndEdit()
            Next

            Dim 열관바닥직접 As String = FpSpread1_Sheet1.Cells(Row, 7).Value.ToString()
            For i As Integer = 0 To DSET1.tbl_yk.Rows.Count - 1
                Dim dr As DS.tbl_ykRow = DSET1.tbl_yk.Rows(i)
                If 공용코드값("1088", dr.면형태) <> "외벽(바닥)" Then Continue For
                dr.열관류율 = 열관바닥직접
                dr.EndEdit()
            Next
            Dim 열관바닥간접 As String = FpSpread1_Sheet1.Cells(Row, 8).Value.ToString()
            For i As Integer = 0 To DSET1.tbl_yk.Rows.Count - 1
                Dim dr As DS.tbl_ykRow = DSET1.tbl_yk.Rows(i)
                If 공용코드값("1088", dr.면형태) <> "내벽(바닥)" Then Continue For
                dr.열관류율 = 열관바닥간접
                dr.EndEdit()
            Next
            Dim 열관외부창 As String = FpSpread1_Sheet1.Cells(Row, 9).Value.ToString()
            Dim 일사에너지투과율외부창 As String = FpSpread1_Sheet1.Cells(Row, 11).Value.ToString()

            For i As Integer = 0 To DSET1.tbl_yk.Rows.Count - 1
                Dim dr As DS.tbl_ykRow = DSET1.tbl_yk.Rows(i)
                If 공용코드값("1088", dr.면형태) <> "외부창" Then Continue For
                dr.열관류율 = 열관외부창
                dr.일사에너지투과율 = 일사에너지투과율외부창
                dr.EndEdit()
            Next
            Dim 열관내부창 As String = FpSpread1_Sheet1.Cells(Row, 10).Value.ToString()
            For i As Integer = 0 To DSET1.tbl_yk.Rows.Count - 1
                Dim dr As DS.tbl_ykRow = DSET1.tbl_yk.Rows(i)
                If 공용코드값("1088", dr.면형태) <> "내부창" Then Continue For
                dr.열관류율 = 열관내부창
                dr.EndEdit()
            Next

            Dim 난방히트펌프난방cop7 As String = FpSpread1_Sheet1.Cells(Row, 12).Value.ToString()
            For i As Integer = 0 To DSET1.tbl_nanbangkiki.Rows.Count - 1
                Dim dr As DS.tbl_nanbangkikiRow = DSET1.tbl_nanbangkiki.Rows(i)
                dr.히트난방정격7 = 난방히트펌프난방cop7
                dr.EndEdit()
            Next
            Dim 난방히트펌프난방cop15 As String = FpSpread1_Sheet1.Cells(Row, 13).Value.ToString()
            For i As Integer = 0 To DSET1.tbl_nanbangkiki.Rows.Count - 1
                Dim dr As DS.tbl_nanbangkikiRow = DSET1.tbl_nanbangkiki.Rows(i)
                dr.히트난방정격10 = 난방히트펌프난방cop15
                dr.EndEdit()
            Next
            Dim 냉방열성능비cop As String = FpSpread1_Sheet1.Cells(Row, 14).Value.ToString()
            For i As Integer = 0 To DSET1.tbl_nangbangkiki.Rows.Count - 1
                Dim dr As DS.tbl_nangbangkikiRow = DSET1.tbl_nangbangkiki.Rows(i)
                dr.열성능비 = 냉방열성능비cop
                dr.EndEdit()
            Next

            Dim 조명에너지부하율 As String = FpSpread1_Sheet1.Cells(Row, 15).Value.ToString()
            For i As Integer = 0 To DSET1.tbl_zone.Rows.Count - 1
                Dim dr As DS.tbl_zoneRow = DSET1.tbl_zone.Rows(i)
                Dim 프로필코드 As String = dr.프로필
                Dim 프로필목록 As DS.tbl_profileRow() = DSET1.tbl_profile.Select("code='" + dr.프로필 + "'")
                If 프로필목록.Length = 1 AndAlso 프로필목록(0).설명.StartsWith("07") Then
                    dr.조명에너지부하율입력치 = 조명에너지부하율
                    dr.EndEdit()
                End If
            Next

            Dim 신재생모듈면적 As String = FpSpread1_Sheet1.Cells(Row, 16).Value.ToString()
            Dim 신재생모듈효율 As String = FpSpread1_Sheet1.Cells(Row, 17).Value.ToString()

            For i As Integer = 0 To DSET1.tbl_new.Rows.Count - 1
                Dim dr As DS.tbl_newRow = DSET1.tbl_new.Rows(i)
                dr.태양광모듈면적 = 신재생모듈면적
                dr.태양광모듈효율 = 신재생모듈효율
                dr.EndEdit()
            Next


            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 = 1
        If Result Then   '//파라미터 True 라면 소요량이 추가로 게산된다.
            Calc.Summary.All()
            If LogSB.ToString <> "" Then
                FpSpread1_Sheet1.Cells(Row, 18).Value = LogSB.ToString
            Else
                FpSpread1_Sheet1.Cells(Row, 18).Value = "시간:" + Ts.ToString()
                calc_ok = 1 '================================2014.04.17 계산이 완료되면 그래프를 보여줌
            End If
        Else
            FpSpread1_Sheet1.Cells(Row, 18).Value = LogSB.ToString
        End If

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

        If calc_ok = 1 Then
            '//해당값을 기록한다.
            Extract_Data(Row - 1)
        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)

        '//2번째 시트에 데이터 기록
        Dim sheet As FarPoint.Win.Spread.SheetView = Me.FpSpread1.Sheets(1)

        Dim 신재생에너지 As Decimal = 0
        Dim 난방에너지 As Decimal = 0
        Dim 냉방에너지 As Decimal = 0
        Dim 급탕에너지 As Decimal = 0
        Dim 조명에너지 As Decimal = 0
        Dim 환기에너지 As Decimal = 0

        Dim 난방 As Decimal = 0  '//아마게산이안도잇으니 여기값들이 0이잇을거에요.
        Dim 냉방 As Decimal = 0
        Dim 조명 As Decimal = 0
        Dim 급탕 As Decimal = 0
        Dim 환기 As Decimal = 0

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

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

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

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

                    난방면적 = 0
                    냉방면적 = 0
                    조명면적 = 0
                    급탕면적 = 0
                    환기면적 = 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

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

                    '//열병합신재생에너지추가 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).환기면적

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

                Case 1  '//에너지소요량

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

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

                    난방면적 = 0
                    냉방면적 = 0
                    조명면적 = 0
                    급탕면적 = 0
                    환기면적 = 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 = 난방에너지 + 냉방에너지 + 급탕에너지 + 조명에너지 + 환기에너지

                    sheet.Cells(Row, BaseIndex + 8).Value = 난방에너지
                    sheet.Cells(Row, BaseIndex + 9).Value = 냉방에너지
                    sheet.Cells(Row, BaseIndex + 10).Value = 급탕에너지
                    sheet.Cells(Row, BaseIndex + 11).Value = 조명에너지
                    sheet.Cells(Row, BaseIndex + 12).Value = 환기에너지
                    sheet.Cells(Row, BaseIndex + 13).Value = 난방에너지 + 냉방에너지 + 급탕에너지 + 조명에너지 + 환기에너지


                Case 2  '//에너지요구량

                    신재생에너지 = 0
                    난방에너지 = Result1.E요구량(0).난방면적
                    냉방에너지 = Result1.E요구량(0).냉방면적
                    급탕에너지 = Result1.E요구량(0).급탕면적
                    조명에너지 = Result1.E요구량(0).조명면적
                    환기에너지 = 0

                    sheet.Cells(Row, BaseIndex + 2).Value = 난방에너지
                    sheet.Cells(Row, BaseIndex + 3).Value = 냉방에너지
                    sheet.Cells(Row, BaseIndex + 4).Value = 급탕에너지
                    sheet.Cells(Row, BaseIndex + 5).Value = 조명에너지
                    sheet.Cells(Row, BaseIndex + 6).Value = 환기에너지
                    sheet.Cells(Row, BaseIndex + 7).Value = 난방에너지 + 냉방에너지 + 급탕에너지 + 조명에너지 + 환기에너지

                Case 3  '//co2발생량

                    신재생에너지 = 0
                    난방에너지 = Result1.Co2발생량(0).난방면적
                    냉방에너지 = Result1.Co2발생량(0).냉방면적
                    급탕에너지 = Result1.Co2발생량(0).급탕면적
                    조명에너지 = Result1.Co2발생량(0).조명면적
                    환기에너지 = Result1.Co2발생량(0).환기면적
                    'sheet.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

                    sheet.Cells(Row, BaseIndex + 20).Value = 난방에너지
                    sheet.Cells(Row, BaseIndex + 21).Value = 냉방에너지
                    sheet.Cells(Row, BaseIndex + 22).Value = 급탕에너지
                    sheet.Cells(Row, BaseIndex + 23).Value = 조명에너지
                    sheet.Cells(Row, BaseIndex + 24).Value = 환기에너지
                    sheet.Cells(Row, BaseIndex + 25).Value = 난방에너지 + 냉방에너지 + 급탕에너지 + 조명에너지 + 환기에너지


            End Select
        Next

        '//에너지생산량
        Sum = (Result1.생산E(0).태양광전력생산량 + Result1.생산E(0).풍력전력생산량 + Result1.생산E(0).신재생열병합전력생산량) / (Result1.일차E소요량(0).난방전력 + Result1.일차E소요량(0).냉방전력 + Result1.일차E소요량(0).급탕전력 + Result1.일차E소요량(0).조명전력 + Result1.일차E소요량(0).환기전력)
        Dim Sum_offsite As Decimal = (Result1.생산E(0).태양광전력생산량_offsite + Result1.생산E(0).풍력전력생산량_offsite + Result1.생산E(0).연료전지전력생산량_offsite) / (Result1.일차E소요량(0).난방전력 + Result1.일차E소요량(0).냉방전력 + Result1.일차E소요량(0).급탕전력 + Result1.일차E소요량(0).조명전력 + Result1.일차E소요량(0).환기전력)
        난방 = Sum * Result1.일차E소요량(0).난방전력  '//아마게산이안도잇으니 여기값들이 0이잇을거에요.
        냉방 = Sum * Result1.일차E소요량(0).냉방전력
        조명 = Sum * Result1.일차E소요량(0).조명전력
        급탕 = Sum * Result1.일차E소요량(0).급탕전력
        환기 = Sum * Result1.일차E소요량(0).환기전력

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


        난방면적 = 0
        냉방면적 = 0
        조명면적 = 0
        급탕면적 = 0
        환기면적 = 0

        Dim 난방면적_offsite As Decimal = 0
        Dim 냉방면적_offsite As Decimal = 0
        Dim 조명면적_offsite As Decimal = 0
        Dim 급탕면적_offsite As Decimal = 0
        Dim 환기면적_offsite 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

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

        Dim 에너지생산량_난방 As Decimal = 난방면적 + 난방면적_offsite + _
            Result1.생산E(0).면적당생산량태양열_난방 + _
            Result1.생산E(0).면적당생산량수열_난방 + _
            Result1.생산E(0).면적당생산량지열_난방 + _
            Result1.생산E(0).신재생면적당열생산량_난방

        Dim 에너지생산량_냉방 As Decimal = 냉방면적 + 냉방면적_offsite + _
        Result1.생산E(0).면적당생산량태양열_냉방 + _
        Result1.생산E(0).면적당생산량수열_냉방 + _
        Result1.생산E(0).면적당생산량지열_냉방 + _
        Result1.생산E(0).신재생면적당열생산량_냉방

        Dim 에너지생산량_급탕 As Decimal = 급탕면적 + 급탕면적_offsite + _
        Result1.생산E(0).면적당생산량태양열_급탕 + _
        Result1.생산E(0).면적당생산량수열_급탕 + _
        Result1.생산E(0).면적당생산량지열_급탕 + _
        Result1.생산E(0).신재생면적당열생산량_급탕

        sheet.Cells(Row, BaseIndex + 26).Value = 에너지생산량_난방
        sheet.Cells(Row, BaseIndex + 27).Value = 에너지생산량_냉방
        sheet.Cells(Row, BaseIndex + 28).Value = 에너지생산량_급탕
        sheet.Cells(Row, BaseIndex + 29).Value = 조명면적 + 조명면적_offsite
        sheet.Cells(Row, BaseIndex + 30).Value = 환기면적 + 환기면적_offsite
        sheet.Cells(Row, BaseIndex + 31).Value = 에너지생산량_난방 + 에너지생산량_냉방 + 에너지생산량_급탕 + (조명면적 + 조명면적_offsite) + (환기면적 + 환기면적_offsite)


        Dim multi As Decimal = 2.75
        Dim 에너지생산량_난방_1차 As Decimal = (난방면적 + 난방면적_offsite) * multi + _
           Result1.생산E(0).면적당생산량태양열_난방 + _
           Result1.생산E(0).면적당생산량수열_난방 + _
           Result1.생산E(0).면적당생산량지열_난방 + _
           Result1.생산E(0).신재생면적당열생산량_난방

        Dim 에너지생산량_냉방_1차 As Decimal = (냉방면적 + 냉방면적_offsite) * multi + _
        Result1.생산E(0).면적당생산량태양열_냉방 + _
        Result1.생산E(0).면적당생산량수열_냉방 + _
        Result1.생산E(0).면적당생산량지열_냉방 + _
        Result1.생산E(0).신재생면적당열생산량_냉방

        Dim 에너지생산량_급탕_1차 As Decimal = (급탕면적 + 급탕면적_offsite) * multi + _
        Result1.생산E(0).면적당생산량태양열_급탕 + _
        Result1.생산E(0).면적당생산량수열_급탕 + _
        Result1.생산E(0).면적당생산량지열_급탕 + _
        Result1.생산E(0).신재생면적당열생산량_급탕

        sheet.Cells(Row, BaseIndex + 32).Value = 에너지생산량_난방_1차
        sheet.Cells(Row, BaseIndex + 33).Value = 에너지생산량_냉방_1차
        sheet.Cells(Row, BaseIndex + 34).Value = 에너지생산량_급탕_1차
        sheet.Cells(Row, BaseIndex + 35).Value = (조명면적 + 조명면적_offsite) * multi
        sheet.Cells(Row, BaseIndex + 36).Value = (환기면적 + 환기면적_offsite) * multi
        sheet.Cells(Row, BaseIndex + 37).Value = 에너지생산량_난방_1차 + 에너지생산량_냉방_1차 + 에너지생산량_급탕_1차 + ((조명면적 + 조명면적_offsite) * multi) + ((환기면적 + 환기면적_offsite) * multi)


        '//평균조명에너지부하율
        '//조명에너지-평균조명에너지부하율
        Dim 조명에너지_부하율합 As Decimal = 0
        Dim 조명에너지_면적합 As Decimal = 0
        For Each drZone As DS.tbl_zoneRow In DSET1.tbl_zone.Select("code <> '0' and code <>'0000' and 면적 <> '0' and 면적 <> ''")

            '//입력오류 체크
            If Not IsNumeric(drZone.면적) Then drZone.면적 = "0"
            If Not IsNumeric(drZone.입력존의수) Then drZone.입력존의수 = "1"
            If Not IsNumeric(drZone.조명에너지부하율입력치) Then drZone.조명에너지부하율입력치 = "0"
            If Not IsNumeric(drZone.조명에너지부하율계산치) Then drZone.조명에너지부하율계산치 = "0"

            If drZone.면적 <> "0" Then
                조명에너지_면적합 += CInt(drZone.입력존의수) * TOSG(drZone.면적) '//모든면적의총합

                If drZone.조명부하산출방법 = "입력치" Then
                    조명에너지_부하율합 += TOSG(drZone.조명에너지부하율입력치) * (CInt(drZone.입력존의수) * TOSG(drZone.면적))
                ElseIf drZone.조명부하산출방법 = "계산치" Then
                    조명에너지_부하율합 += TOSG(drZone.조명에너지부하율계산치) * (CInt(drZone.입력존의수) * TOSG(drZone.면적))
                End If
            End If


        Next
        Dim 평균조명에너지부하율 As Decimal = 0
        If 조명에너지_면적합 <> 0 Then 평균조명에너지부하율 = (조명에너지_부하율합 / 조명에너지_면적합)
        sheet.Cells(Row, BaseIndex + 38).Value = 평균조명에너지부하율

        '//자립률
        '//자립률관련추가  170725
        '//170725
        Dim 단위면적당신재생1차에너지합 As Decimal = 0
        Dim 단위면적당신재생1차에너지합_offsite As Decimal = 0
        Dim 단위면적당1차에너소비량합 As Decimal = 0
        Dim 에너지자립률 As Double = 0
        Dim 에너지자립률_offsite As Double = 0

        Sum = (Result1.생산E(0).태양광전력생산량 + Result1.생산E(0).풍력전력생산량 + Result1.생산E(0).신재생열병합전력생산량) / (Result1.일차E소요량(0).난방전력 + Result1.일차E소요량(0).냉방전력 + Result1.일차E소요량(0).급탕전력 + Result1.일차E소요량(0).조명전력 + Result1.일차E소요량(0).환기전력)
        Sum_offsite = (Result1.생산E(0).태양광전력생산량_offsite + Result1.생산E(0).풍력전력생산량_offsite + Result1.생산E(0).연료전지전력생산량_offsite) / (Result1.일차E소요량(0).난방전력 + Result1.일차E소요량(0).냉방전력 + Result1.일차E소요량(0).급탕전력 + Result1.일차E소요량(0).조명전력 + Result1.일차E소요량(0).환기전력)
        난방 = Sum * Result1.일차E소요량(0).난방전력  '//아마게산이안도잇으니 여기값들이 0이잇을거에요.
        냉방 = Sum * Result1.일차E소요량(0).냉방전력
        조명 = Sum * Result1.일차E소요량(0).조명전력
        급탕 = Sum * Result1.일차E소요량(0).급탕전력
        환기 = Sum * Result1.일차E소요량(0).환기전력

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

        난방면적 = 0
        냉방면적 = 0
        조명면적 = 0
        급탕면적 = 0
        환기면적 = 0

        난방면적_offsite = 0
        냉방면적_offsite = 0
        조명면적_offsite = 0
        급탕면적_offsite = 0
        환기면적_offsite = 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

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

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

        '//열병합신재생에너지추가 130831 arin
        Dim _자립_신재생에너지 As Single = -1 * (Result1.생산E(0).면적당생산량태양열 + Result1.생산E(0).신재생면적당열생산량 + Result1.생산E(0).면적당생산량지열 + 전기 * 2.75)
        Dim _자립_신재생에너지_offsite As Single = -1 * (전기_offsite * 2.75)
        난방에너지 = Math.Round(Result1.일차E소요량(0).난방면적, 1)
        냉방에너지 = Math.Round(Result1.일차E소요량(0).냉방면적, 1)
        급탕에너지 = Math.Round(Result1.일차E소요량(0).급탕면적, 1)
        조명에너지 = Math.Round(Result1.일차E소요량(0).조명면적, 1)
        환기에너지 = Math.Round(Result1.일차E소요량(0).환기면적, 1)
        단위면적당신재생1차에너지합 = Math.Round(-1 * _자립_신재생에너지, 1)
        단위면적당신재생1차에너지합_offsite = Math.Round(-1 * _자립_신재생에너지_offsite, 1)


        단위면적당1차에너소비량합 = 난방에너지 + 냉방에너지 + 급탕에너지 + 조명에너지 + 환기에너지 + 단위면적당신재생1차에너지합
        If 단위면적당1차에너소비량합 <> 0 Then
            '에너지자립률 = (단위면적당신재생1차에너지합 / 단위면적당1차에너소비량합) * 100

            에너지자립률 = (Math.Round(단위면적당신재생1차에너지합, 1) / 단위면적당1차에너소비량합) * 100

            Dim scale As Decimal = 0
            If 에너지자립률 >= 20 Then
                scale = 1.0
            ElseIf 에너지자립률 >= 15 Then
                scale = 0.9
            ElseIf 에너지자립률 >= 10 Then
                scale = 0.8
            Else
                scale = 0.7
            End If

            에너지자립률_offsite = (Math.Round(단위면적당신재생1차에너지합_offsite * scale, 1) / 단위면적당1차에너소비량합) * 100
            에너지자립률 += 에너지자립률_offsite

        Else
            에너지자립률 = 0
            에너지자립률_offsite = 0
        End If
        sheet.Cells(Row, BaseIndex + 39).Value = 에너지자립률
        sheet.Cells(Row, BaseIndex + 40).Value = 단위면적당신재생1차에너지합
        sheet.Cells(Row, BaseIndex + 41).Value = 단위면적당1차에너소비량합




        '//방위별, 부위별 평균열관류율 계산 20230901
        Dim 창및문면적비, 외벽열관류율_평균 As Decimal
        Dim 외벽열관류율_남 As Decimal
        Dim 외벽열관류율_동 As Decimal
        Dim 외벽열관류율_북 As Decimal
        Dim 외벽열관류율_서 As Decimal

        Dim 창열관류율_평균 As Decimal
        Dim 창열관류율_남 As Decimal
        Dim 창열관류율_동 As Decimal
        Dim 창열관류율_북 As Decimal
        Dim 창열관류율_서 As Decimal

        Dim 일사에너지투과율_평균 As Decimal
        Dim 일사에너지투과율_남 As Decimal
        Dim 일사에너지투과율_동 As Decimal
        Dim 일사에너지투과율_북 As Decimal
        Dim 일사에너지투과율_서 As Decimal


        calc_창및문면적비(창및문면적비, 외벽열관류율_평균, 창열관류율_평균, 일사에너지투과율_평균)
        calc_창및문면적비(창및문면적비, 외벽열관류율_남, 창열관류율_남, 일사에너지투과율_남, "남")
        calc_창및문면적비(창및문면적비, 외벽열관류율_동, 창열관류율_동, 일사에너지투과율_동, "동")
        calc_창및문면적비(창및문면적비, 외벽열관류율_북, 창열관류율_북, 일사에너지투과율_북, "북")
        calc_창및문면적비(창및문면적비, 외벽열관류율_서, 창열관류율_서, 일사에너지투과율_서, "서")

        '//평균열관류율 11개(?)
        sheet.Cells(Row, BaseIndex + 42).Value = 외벽열관류율_평균
        sheet.Cells(Row, BaseIndex + 43).Value = 외벽열관류율_남
        sheet.Cells(Row, BaseIndex + 44).Value = 외벽열관류율_동
        sheet.Cells(Row, BaseIndex + 45).Value = 외벽열관류율_북
        sheet.Cells(Row, BaseIndex + 46).Value = 외벽열관류율_서

        '//외벽지붕(평균열관류율)
        sheet.Cells(Row, BaseIndex + 47).Value = calc_평균열관류율(New String() {"외벽(지붕)", "내벽(지붕)"})
        '//외벽바닥(평균열관류율)
        sheet.Cells(Row, BaseIndex + 48).Value = calc_평균열관류율(New String() {"외벽(바닥)", "내벽(바닥)"})

        sheet.Cells(Row, BaseIndex + 49).Value = 창열관류율_평균
        sheet.Cells(Row, BaseIndex + 50).Value = 창열관류율_남
        sheet.Cells(Row, BaseIndex + 51).Value = 창열관류율_동
        sheet.Cells(Row, BaseIndex + 52).Value = 창열관류율_북
        sheet.Cells(Row, BaseIndex + 53).Value = 창열관류율_서

        sheet.Cells(Row, BaseIndex + 54).Value = 일사에너지투과율_평균
        sheet.Cells(Row, BaseIndex + 55).Value = 일사에너지투과율_남
        sheet.Cells(Row, BaseIndex + 56).Value = 일사에너지투과율_동
        sheet.Cells(Row, BaseIndex + 57).Value = 일사에너지투과율_북
        sheet.Cells(Row, BaseIndex + 58).Value = 일사에너지투과율_서




    End Sub
End Class