Files
Karodeung/Epole/업로드폼/XLSImport.vb
2026-01-17 00:56:25 +09:00

731 lines
32 KiB
VB.net

Imports System.IO
Imports System.Text
Imports acc.ARINCLASS
Public Class XLSImport
Dim Impctls(18) As NewImpCnt2
' Dim FN As String = vbNullString
Dim Arin As New acc.ARINCLASS
Dim TabName As String
Dim ColName() As String
Dim Value() As String
Dim vtype() As String
Dim ColDesc() As String '열제목'
Dim SubSqlCnt As Integer
Dim SubSql() As String
Dim USERFC() As String
Dim DivString As String '//구분자
Dim Err As Boolean = False '//에러발생상태
Dim StartPos As Integer = 0 '//시작열순서
Dim EndPos As Integer = 0 '//종료열순서
Dim IniFile As String = My.Application.Info.DirectoryPath & "\import.ini"
Dim SelControl As Windows.Forms.TextBox
Dim sql As New StringBuilder
Dim DelSql As New StringBuilder
Dim MyTextBox() As Windows.Forms.TextBox
Dim MyComBo() As Windows.Forms.ComboBox
Dim MyLaBel() As Label
'// 임시데이터테이블
Dim DT_tongsin As New ireaDataSet.Detail_tongsinDataTable
Dim DT_Sknetworks As New ireaDataSet.Detail_SknetworksDataTable
Dim DT_Jdung As New ireaDataSet.Detail_DeungDataTable
Dim DT_Karo As New ireaDataSet.Detail_KaroDataTable
'// 로우
Dim ROW_Tongsin As ireaDataSet.Detail_tongsinRow
Dim ROW_SknetWorks As ireaDataSet.Detail_SknetworksRow
Dim ROW_Jdung As ireaDataSet.Detail_DeungRow
Dim ROW_Karo As ireaDataSet.Detail_KaroRow
Dim SrcDataSet As ireaDataSet
Dim gubunId As Integer '//추가될 관리id를 받는다.
Dim Wt As Work_Type '//관리구분을 받는다. 없을경우 기본 0(가공번호찰로 한다)
'Dim MaxArray As String '"엑셀의 최대범위"
Dim Sview As FarPoint.Win.Spread.SheetView
Public Sub New()
' 이 호출은 Windows Form 디자이너에 필요합니다.
InitializeComponent()
End Sub
Public Sub New(ByVal DataSrc As ireaDataSet, ByVal rowid As Short, ByVal vgubun As Short) '//현재이걸로 데이터를 가져온다.
InitializeComponent()
gubunId = rowid
Wt = vgubun
SrcDataSet = DataSrc
End Sub
Private Sub Control_Setting()
Select Case Wt
Case Work_Type.jongakdung
Me.Text = "정액등 엑셀데이터 가져오기"
Me.Set_ImpCtl(New String() {"고객번호1", "고객번호2", "고객번호3", "관리번호1", "관리번호2", "관리번호3", "지점명"})
Case Work_Type.karodung
Me.Text = "가로등 엑셀데이터 가져오기"
Me.Set_ImpCtl(New String() {"행정도시", "지역명", "번지", "관리번호1", "관리번호2", "문의전화1", "문의전화2", "비고1", "비고2", "비고3", "QRCODE"})
Case Work_Type.Sknetworks
Me.Text = "기타번호찰 엑셀데이터 가져오기"
Me.Set_ImpCtl(New String() {"구간명1", "구간명2", "전주번호1", "전주번호2", "운용기관", "중계기명", "규격", "시공일", "시공자", "문의전화1", "문의전화2"})
Case Else
Me.Text = "번호찰 가져오기"
MsgBox("Err: ControlSEtting : 알수없는 번호찰형식")
End Select
End Sub
Private Sub Set_ImpCtl(ByVal Name() As String)
Dim Offset As Short = 0
For i As Short = 0 To Name.Length - 1
Me.Impctls(i).제목 = Name(i)
Me.Impctls(i).enable = True
Me.Impctls(i).Visible = True
Me.Impctls(i).값형태 = NewImpCnt2.E_vartype.문자
Next
End Sub
Private Sub Apply_SkNetworks() '//가로등 미리보기
Dim 번호 As Integer '//번호는 notnull 이다
Dim NullChk As Boolean = Me.NullCHeck
Dim NullVal As String = ""
Dim cnt As Integer = -1
Dim StartCnt As Integer = CInt(Me.tb_scnt.Text)
Dim EndCnt As Integer = IIf(CInt(Me.tb_ecnt.Text) = 0, Me.CustFP1.ActiveSheet.RowCount, CInt(Me.tb_ecnt.Text))
Dim index As Integer = 0
Dim VarStr(18) As String '//문자를 저장하는 변수
Dim Nullcnt As Short = 0
NOTICE("(임시)데이터베이스에 기록합니다(취소불가능)", Me.lb_msg)
'If (Me.tb_ecnt.Text = 0 AndAlso UserInfo.Type = E_AuthType.Demo) OrElse (UserInfo.Type = E_AuthType.Demo AndAlso (Me.tb_ecnt.Text - Me.tb_scnt.Text) > 100) Then
' MsgBox("임시사용자는 자동종료카운트(0)을 사용할 수 없으며" & vbCrLf & vbCrLf & _
' "시작카운터와 종료카운터의 범위는 100까지만 가능합니다", MsgBoxStyle.Information, "확인")
' Me.tb_ecnt.Text = Me.tb_scnt.Text + 100
'End If
Me.DT_Sknetworks.Rows.Clear() : Me.DT_Sknetworks.AcceptChanges()
For Each Dr As FarPoint.Win.Spread.Row In Me.CustFP1.ActiveSheet.Rows '//모든로우에해당하는데 시작줄부터한다
If Dr.Index + 1 >= StartCnt AndAlso Dr.Index + 1 <= EndCnt Then '//시작인덱스 이상일경우에만 한다.
index += 1
SHowCnt(index, EndCnt)
NullVal = False
Try
번호 = index
For i As Short = 0 To 18
VarStr(i) = Me.GetFPData(Me.Impctls(i), Dr) '.ToUpper
Next
If NullChk Then '//널값 체크시에 체크된것이 null이라면 nullval 을 true로 바꾼다.
NullVal = ""
For i As Short = 0 To 18
If Me.Impctls(i).빈값체크 AndAlso Me.Impctls(i).enable Then
NullVal &= IIf(VarStr(i).Trim = "", "", "X")
If NullVal <> "" Then Exit For
End If
Next
Else
NullVal = "X" '//기본false로 해줘야한다.
End If
If NullVal.Trim <> "" Then 'false일때만 추가한다. true는 널값이잇으므로 넘어간다.
Me.ROW_SknetWorks = Me.DT_Sknetworks.NewDetail_SknetworksRow '//임시테이블
Me.ROW_SknetWorks.rowid = System.Guid.NewGuid
Me.ROW_SknetWorks.관리ID = gubunId
Me.ROW_SknetWorks.번호 = index
Me.ROW_SknetWorks.정렬번호 = "1" & Format(index, "0000") & "1000"
Me.ROW_SknetWorks.출력 = True
'------------------------------------------
Me.ROW_SknetWorks.구간명1 = VarStr(0)
Me.ROW_SknetWorks.구간명2 = VarStr(1)
Me.ROW_SknetWorks.전주번호1 = VarStr(2)
Me.ROW_SknetWorks.전주번호2 = VarStr(3)
Me.ROW_SknetWorks.운용기관 = VarStr(4)
Me.ROW_SknetWorks.중계기명 = VarStr(5)
Me.ROW_SknetWorks.규격 = VarStr(6)
Me.ROW_SknetWorks.시공일 = VarStr(7)
Me.ROW_SknetWorks.시공자 = VarStr(8)
Me.ROW_SknetWorks.연락처1 = VarStr(9)
Me.ROW_SknetWorks.연락처2 = VarStr(10)
Me.DT_Sknetworks.Rows.Add(Me.ROW_SknetWorks) '
Else '//빈줄이 나왔음을 의미하므로 빈줄 카운터 증가
Nullcnt += 1
If Nullcnt >= 5 Then
Exit For
End If
End If
Catch ex As ConstraintException '//중복
' AddLog("번호중복", "중복된 번호:" & 번호)
Catch ex As Exception
' AddLog(ex.InnerException.ToString, ex.Message.ToString)
End Try
End If
Next
NOTICE("가져오기완료(" & Me.CustFP2_Sheet1.RowCount & "개)", Me.lb_msg)
Me.CustFP2.DataSource = Me.DT_Sknetworks
'//보여서 필요없는 열값을 숨긴다.
Me.CustFP2.ActiveSheet.Columns(0).Width = 0 '//rowid
Me.CustFP2.ActiveSheet.Columns(1).Width = 0 '//관리Id
Me.CustFP2.ActiveSheet.Columns(2).Width = 0 '//정렬번호
Me.CustFP2.ActiveSheet.Columns(16).Width = 0 '//출력
Me.CustFP2.ActiveSheet.Columns(17).Width = 0 '//출력
End Sub
Private Sub Apply_karo() '//가로등 미리보기
Dim 번호 As Integer '//번호는 notnull 이다
Dim NullChk As Boolean = Me.NullCHeck
Dim NullVal As String = ""
Dim cnt As Integer = -1
Dim StartCnt As Integer = CInt(Me.tb_scnt.Text)
Dim EndCnt As Integer = IIf(CInt(Me.tb_ecnt.Text) = 0, Me.CustFP1.ActiveSheet.RowCount, CInt(Me.tb_ecnt.Text))
Dim index As Integer = 0
Dim VarStr(18) As String '//문자를 저장하는 변수
Dim NullCnt As Short = 0
NOTICE("(임시)데이터베이스에 기록합니다(취소불가능)", Me.lb_msg)
'If (Me.tb_ecnt.Text = 0 AndAlso UserInfo.Type = E_AuthType.Demo) OrElse (UserInfo.Type = E_AuthType.Demo AndAlso (Me.tb_ecnt.Text - Me.tb_scnt.Text) > 100) Then
' MsgBox("임시사용자는 자동종료카운트(0)을 사용할 수 없으며" & vbCrLf & vbCrLf & _
' "시작카운터와 종료카운터의 범위는 100까지만 가능합니다", MsgBoxStyle.Information, "확인")
' Me.tb_ecnt.Text = Me.tb_scnt.Text + 100
'End If
Me.DT_Karo.Rows.Clear() : Me.DT_Karo.AcceptChanges()
Dim sb As New System.Text.StringBuilder()
For Each Dr As FarPoint.Win.Spread.Row In Me.CustFP1.ActiveSheet.Rows '//모든로우에해당하는데 시작줄부터한다
If Dr.Index + 1 >= StartCnt AndAlso Dr.Index + 1 <= EndCnt Then '//시작인덱스 이상일경우에만 한다.
index += 1
SHowCnt(index, EndCnt)
NullVal = False
Try
번호 = index
For i As Short = 0 To VarStr.GetUpperBound(0)
If i = 10 Then '//qr코드제외
VarStr(i) = Me.GetFPData(Me.Impctls(i), Dr)
Else
VarStr(i) = Me.GetFPData(Me.Impctls(i), Dr) '.ToUpper
End If
Next
If NullChk Then '//널값 체크시에 체크된것이 null이라면 nullval 을 true로 바꾼다.
NullVal = ""
For i As Short = 0 To VarStr.GetUpperBound(0)
If Me.Impctls(i).빈값체크 AndAlso Me.Impctls(i).enable Then
NullVal &= IIf(VarStr(i).Trim = "", "", "X")
If NullVal <> "" Then Exit For
End If
Next
Else
NullVal = "X" '//기본false로 해줘야한다.
End If
If NullVal.Trim <> "" Then 'false일때만 추가한다. true는 널값이잇으므로 넘어간다.
Me.ROW_Karo = Me.DT_Karo.NewDetail_KaroRow '//임시테이블
Me.ROW_Karo.rowid = System.Guid.NewGuid
Me.ROW_Karo.관리ID = gubunId
Me.ROW_Karo.번호 = index
Me.ROW_Karo.정렬번호 = "1" & Format(index, "0000") & "1000"
Me.ROW_Karo.출력 = True
'------------------------------------------ Me.Set_ImpCtl(New String() {"행정도시", "지역명", "번지", "관리번호1", "관리번호2", "문의전화1", "문의전화2"})
Me.ROW_Karo.area2 = VarStr(0)
Me.ROW_Karo.area1 = VarStr(1)
Me.ROW_Karo.f1 = VarStr(2)
Me.ROW_Karo.m1 = VarStr(3)
Me.ROW_Karo.m2 = VarStr(4)
Me.ROW_Karo.tel1 = VarStr(5)
Me.ROW_Karo.tel2 = VarStr(6)
Me.ROW_Karo.bigo1 = VarStr(7)
Me.ROW_Karo.bigo2 = VarStr(8)
Me.ROW_Karo.bigo3 = VarStr(9)
Me.ROW_Karo.QRCODE = VarStr(10)
Me.DT_Karo.Rows.Add(Me.ROW_Karo)
NullCnt = 0
Else '//빈줄이 나왔음을 의미하므로 빈줄 카운터 증가
NullCnt += 1
If NullCnt >= 5 Then
Exit For
End If
End If
Catch ex As ConstraintException '//중복
Dim ermsg As String = ex.Message.ToString
' AddLog("번호중복", "중복된 번호:" & 번호)
Catch ex As Exception
Dim ermsg As String = ex.Message.ToString
If sb.Length < 100 Then sb.AppendLine(ex.Message)
' AddLog(ex.InnerException.ToString, ex.Message.ToString)
End Try
End If
Next
NOTICE("가져오기완료(" & Me.CustFP2_Sheet1.RowCount & "개)", Me.lb_msg)
Me.CustFP2.DataSource = Me.DT_Karo
'//보여서 필요없는 열값을 숨긴다.
Me.CustFP2.ActiveSheet.Columns(0).Width = 0 '//rowid
Me.CustFP2.ActiveSheet.Columns(1).Width = 0 '//관리Id
Me.CustFP2.ActiveSheet.Columns(2).Width = 0 '//정렬번호
Me.CustFP2.ActiveSheet.Columns(3).Width = 0 '//출력
Me.CustFP2.ActiveSheet.Columns(14).Width = 0 '//정렬번호
Me.CustFP2.ActiveSheet.Columns(4).Label = "행정도시"
Me.CustFP2.ActiveSheet.Columns(5).Label = "지역명"
Me.CustFP2.ActiveSheet.Columns(6).Label = "번지"
Me.CustFP2.ActiveSheet.Columns(7).Label = "관리번호1"
Me.CustFP2.ActiveSheet.Columns(8).Label = "관리번호2"
Me.CustFP2.ActiveSheet.Columns(9).Label = "전화번호1"
Me.CustFP2.ActiveSheet.Columns(10).Label = "전화번호2"
Me.CustFP2.ActiveSheet.Columns(11).Label = "비고1"
Me.CustFP2.ActiveSheet.Columns(12).Label = "비고2"
Me.CustFP2.ActiveSheet.Columns(13).Label = "비고3"
If sb.Length > 0 Then
MsgBox(sb.ToString())
End If
End Sub
Private Sub Apply_jdung() '//가로등 미리보기
Dim 번호 As Integer '//번호는 notnull 이다
Dim NullChk As Boolean = Me.NullCHeck
Dim NullVal As String = ""
Dim cnt As Integer = -1
Dim StartCnt As Integer = CInt(Me.tb_scnt.Text)
Dim EndCnt As Integer = IIf(CInt(Me.tb_ecnt.Text) = 0, Me.CustFP1.ActiveSheet.RowCount, CInt(Me.tb_ecnt.Text))
Dim index As Integer = 0
Dim VarStr(18) As String '//문자를 저장하는 변수
Dim nullcnt As Short = 0
NOTICE("(임시)데이터베이스에 기록합니다(취소불가능)", Me.lb_msg)
'If (Me.tb_ecnt.Text = 0 AndAlso UserInfo.Type = E_AuthType.Demo) OrElse (UserInfo.Type = E_AuthType.Demo AndAlso (Me.tb_ecnt.Text - Me.tb_scnt.Text) > 100) Then
' MsgBox("임시사용자는 자동종료카운트(0)을 사용할 수 없으며" & vbCrLf & vbCrLf & _
' "시작카운터와 종료카운터의 범위는 100까지만 가능합니다", MsgBoxStyle.Information, "확인")
' Me.tb_ecnt.Text = Me.tb_scnt.Text + 100
'End If
Me.DT_Jdung.Rows.Clear() : Me.DT_Jdung.AcceptChanges()
For Each Dr As FarPoint.Win.Spread.Row In Me.CustFP1.ActiveSheet.Rows '//모든로우에해당하는데 시작줄부터한다
If Dr.Index + 1 >= StartCnt AndAlso Dr.Index + 1 <= EndCnt Then '//시작인덱스 이상일경우에만 한다.
index += 1
SHowCnt(index, EndCnt)
NullVal = False
Try
번호 = index
For i As Short = 0 To 18
VarStr(i) = Me.GetFPData(Me.Impctls(i), Dr) '.ToUpper
Next
If NullChk Then '//널값 체크시에 체크된것이 null이라면 nullval 을 true로 바꾼다.
NullVal = ""
For i As Short = 0 To 18
If Me.Impctls(i).빈값체크 AndAlso Me.Impctls(i).enable Then
NullVal &= IIf(VarStr(i).Trim = "", "", "X")
If NullVal <> "" Then Exit For
End If
Next
Else
NullVal = "X" '//기본false로 해줘야한다.
End If
If NullVal.Trim <> "" Then 'false일때만 추가한다. true는 널값이잇으므로 넘어간다.
Me.ROW_Jdung = Me.DT_Jdung.NewDetail_DeungRow '//임시테이블
Me.ROW_Jdung.rowid = System.Guid.NewGuid
Me.ROW_Jdung.관리ID = gubunId
Me.ROW_Jdung.번호 = index
Me.ROW_Jdung.정렬번호 = "1" & Format(index, "0000") & "1000"
Me.ROW_Jdung.출력 = True
'------------------------------------------ Me.Set_ImpCtl(New String() {"고객번호1", "고객번호2", "고객번호3", "관리번호1", "관리번호2", "관리번호3", "지점명"})
Me.ROW_Jdung.고객번호1 = VarStr(0)
Me.ROW_Jdung.고객번호2 = VarStr(1)
Me.ROW_Jdung.고객번호3 = VarStr(2)
Me.ROW_Jdung.관리번호1 = VarStr(3)
Me.ROW_Jdung.관리번호2 = VarStr(4)
Me.ROW_Jdung.관리번호3 = VarStr(5)
Me.ROW_Jdung.지점명 = VarStr(6)
Me.DT_Jdung.Rows.Add(Me.ROW_Jdung) '
Else '//빈줄이 나왔음을 의미하므로 빈줄 카운터 증가
NullCnt += 1
If NullCnt >= 5 Then
Exit For
End If
End If
Catch ex As ConstraintException '//중복
' AddLog("번호중복", "중복된 번호:" & 번호)
Catch ex As Exception
' AddLog(ex.InnerException.ToString, ex.Message.ToString)
End Try
End If
Next
NOTICE("가져오기완료(" & Me.CustFP2_Sheet1.RowCount & "개)", Me.lb_msg)
Me.CustFP2.DataSource = Me.DT_Jdung
'//보여서 필요없는 열값을 숨긴다.
Me.CustFP2.ActiveSheet.Columns(0).Width = 0 '//rowid
Me.CustFP2.ActiveSheet.Columns(1).Width = 0 '//관리Id
Me.CustFP2.ActiveSheet.Columns(2).Width = 0 '//정렬번호
Me.CustFP2.ActiveSheet.Columns(3).Width = 0 '//출력
Me.CustFP2.ActiveSheet.Columns(4).Width = 0 '//출력
End Sub
Private Sub ToolStripButton6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton6.Click
'//기존에 존재하는 모든 데이터를 삭제하고 새로 추가합니다.
'//Byref 로가져온 원래데이터셋을 이용해서 데이터를 삭제합니다.
Select Case Wt
Case Work_Type.jongakdung
If Me.SrcDataSet.Detail_Deung.Rows.Count <> 0 Then
NOTICE("기존의 자료를 삭제합니다", Me.lb_msg)
For I As Integer = Me.SrcDataSet.Detail_Deung.Rows.Count - 1 To 0 Step -1
Me.SHowCnt(I, Me.SrcDataSet.Detail_Deung.Rows.Count - 1)
Me.SrcDataSet.Detail_Deung.Rows(I).Delete()
Next
End If
Me.SrcDataSet.Detail_Deung.Merge(Me.DT_Jdung)
Case Work_Type.karodung
If Me.SrcDataSet.Detail_Karo.Rows.Count <> 0 Then
NOTICE("기존의 자료를 삭제합니다", Me.lb_msg)
For I As Integer = Me.SrcDataSet.Detail_Karo.Rows.Count - 1 To 0 Step -1
Me.SHowCnt(I, Me.SrcDataSet.Detail_Karo.Rows.Count - 1)
Me.SrcDataSet.Detail_Karo.Rows(I).Delete()
Next
End If
Me.SrcDataSet.Detail_Karo.Merge(Me.DT_Karo)
Case Work_Type.Sknetworks
If Me.SrcDataSet.Detail_Sknetworks.Rows.Count <> 0 Then
NOTICE("기존의 자료를 삭제합니다", Me.lb_msg)
For I As Integer = Me.SrcDataSet.Detail_Sknetworks.Rows.Count - 1 To 0 Step -1
Me.SHowCnt(I, Me.SrcDataSet.Detail_Sknetworks.Rows.Count - 1)
Me.SrcDataSet.Detail_Sknetworks.Rows(I).Delete()
Next
End If
Me.SrcDataSet.Detail_Sknetworks.Merge(Me.DT_Sknetworks)
End Select
Me.Close()
End Sub
Private Sub ToolStripButton5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton5.Click
'//기존에 존재하는 모든 데이터를 삭제하고 새로 추가합니다.
Dim DT As New DataTable
Dim CT As New DataTable
Select Case Wt
Case Work_Type.jongakdung
DT = Me.SrcDataSet.Detail_Deung
CT = Me.DT_Jdung
Case Work_Type.karodung
DT = Me.SrcDataSet.Detail_Karo
CT = Me.DT_Karo
Case Work_Type.Sknetworks
DT = Me.SrcDataSet.Detail_Sknetworks
CT = Me.DT_Sknetworks
End Select
'//최대값을 찾습니다.
NOTICE("새로운 번호를 찾습니다", Me.lb_msg)
Dim 최대값 As Integer
Dim Dv As New DataView(DT, "", "번호 desc", DataViewRowState.CurrentRows)
If Dv.Count = 0 Then
최대값 = 0
Else
최대값 = Dv(0)("번호")
End If
NOTICE("번호를 새로 부여합니다", Me.lb_msg)
For I As Integer = 0 To CT.Rows.Count - 1 '//추가는 번호를 새로 받는다.
Me.SHowCnt(I, CT.Rows.Count - 1)
CT.Rows(I)("번호") = 최대값 + I + 1
CT.Rows(I)("정렬번호") = "1" & Format((최대값 + I + 1), "0000") & "1000"
Next
NOTICE("기존의 데이터와 병합합니다", Me.lb_msg)
DT.Merge(CT)
Me.Close()
End Sub
#Region "자주바꾸지앟음"
Private Sub ToolStripButton2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton2.Click
If Me.CustFP1.ActiveSheet.RowCount <= 0 Then
NOTICE("데이터가 없습니다", Me.lb_msg)
Exit Sub
End If
Select Case Wt
Case Work_Type.jongakdung
Me.Apply_jdung()
Case Work_Type.karodung
Me.Apply_karo()
Case Work_Type.Sknetworks
Me.Apply_SkNetworks()
End Select
End Sub
Private Sub CustFP1_CellDoubleClick(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.CellClickEventArgs) Handles CustFP1.CellDoubleClick
If SelControl Is Nothing Then Return
SelControl.Text = Me.CustFP1.ActiveSheet.ActiveColumnIndex + 1
End Sub
Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click
Dim OD As New OpenFileDialog
Dim Aranini As New MyINI(IniFile)
OD.FileName = Me.lb_file.Text
OD.Filter = "MS Office Excel WorkSheet(*.xls)|*.xls"
OD.FilterIndex = 1
' OD.RestoreDirectory = True
If OD.ShowDialog() = Windows.Forms.DialogResult.Cancel Then
NOTICE("불러오기가 취소되었습니다", Me.lb_msg)
Else
Aranini.Write("normal", "file", OD.FileName)
Me.lb_file.Text = OD.FileName
ReadXls(OD.FileName)
End If
End Sub
Private Sub XLSImport_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Me.Save_Setting() '//현재설정을 저장하고나간다.
End Sub
Private Sub Control_init()
Me.Impctls(0) = Me.ImpCtl2
Me.Impctls(1) = Me.ImpCtl3
Me.Impctls(2) = Me.ImpCtl4
Me.Impctls(3) = Me.ImpCtl5
Me.Impctls(4) = Me.ImpCtl6
Me.Impctls(5) = Me.ImpCtl7
Me.Impctls(6) = Me.ImpCtl8
Me.Impctls(7) = Me.ImpCtl9
Me.Impctls(8) = Me.ImpCtl10
Me.Impctls(9) = Me.ImpCtl11
Me.Impctls(10) = Me.ImpCtl12
Me.Impctls(11) = Me.ImpCtl13
Me.Impctls(12) = Me.ImpCtl14
Me.Impctls(13) = Me.ImpCtl15
Me.Impctls(14) = Me.ImpCtl16
Me.Impctls(15) = Me.ImpCtl17
Me.Impctls(16) = Me.ImpCtl18
Me.Impctls(17) = Me.ImpCtl19
Me.Impctls(18) = Me.ImpCtl20
For i As Short = 0 To Me.Impctls.GetUpperBound(0)
Me.Impctls(i).enable = False
Next
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Control_Init()
Control_Setting()
If Not GetINI(IniFile) Then
MsgBox("오류로인해 프로그램이 종료됩니다." & vbCrLf & vbCrLf & "환경설정 데이터가 반환되지 않았습니다", MsgBoxStyle.Critical, "Er")
End
End If
LOadCurrentSet()
'Me.CustFP1.Font = New Font(ViewFont.FontName, ViewFont.FontSize, Me.Font.Style)
'Me.ToolStrip1.Font = New Font(MenuFont.FontName, MenuFont.FontSize, Me.Font.Style) '//글자정보 불러오기
'Me.ToolStrip2.Font = New Font(MenuFont.FontName, MenuFont.FontSize, Me.Font.Style) '//글자정보 불러오기
'Me.StatusStrip1.Font = New Font(MenuFont.FontName, MenuFont.FontSize, Me.Font.Style) '//글자정보 불러오기
End Sub
'''
''' 현재 텍스트박스 셋팅을 저장합니다.
'''
Private Sub LOadCurrentSet()
Dim ini As New MyINI(IniFile)
For Each A As NewControlGroup.NewImpCnt2 In Me.TableLayoutPanel3.Controls
A.열번호 = ini.Read("CURSETNUM" & Wt, A.Name)
A.문자열자르기 = ini.Read("CURSETSPL" & Wt, A.Name)
A.빈값체크 = ini.Read("CURSETNUL" & Wt, A.Name, False)
Next
End Sub
Private Sub Save_Setting() '//현재 셋팅을 저장합니다.
'//저장목록은 시작/종료 열번호 아이템의 텍스트이다.
Dim Aranini As New MyINI(IniFile)
Aranini.Write("normal", "startpos", Me.tb_scnt.Text) '//시작
Aranini.Write("normal", "endpos", Me.tb_ecnt.Text) '//종료
For Each A As NewControlGroup.NewImpCnt2 In Me.TableLayoutPanel3.Controls '//각 텍스트박스
Aranini.Write("CURSETNUM" & Wt, A.Name, A.열번호)
Aranini.Write("CURSETSPL" & Wt, A.Name, A.문자열자르기)
Aranini.Write("CURSETNUL" & Wt, A.Name, A.빈값체크)
Next
End Sub
Private Sub MyDoubleClick(ByVal sender As Object, ByVal e As System.EventArgs)
If Not SelControl Is Nothing Then SelControl.BackColor = Color.White
If Not SelControl Is Nothing AndAlso SelControl.Tag = CType(sender, TextBox).Tag Then '//같은거라면 선택하제한다.
SelControl.BackColor = Color.White
'Me.lb_selcontrol.Text = "선택없음"
SelControl = Nothing
Return
End If
SelControl = CType(sender, Windows.Forms.TextBox)
SelControl.BackColor = Color.Green
If SelControl.Tag Is Nothing Then
MsgBox("TAG 속성이 비어있습니다", MsgBoxStyle.Information, "Error")
Else
'Me.lb_selcontrol.Text = "선택됨 : " & SelControl.Tag.ToString
End If
End Sub
Private Function GetINI(ByVal filename As String) As Boolean '//'REad INi file
If filename Is vbNullString Then Return False
Dim INiFn As String
If filename.IndexOf(":") >= 0 Then
INiFn = filename
Else
INiFn = My.Application.Info.DirectoryPath & "\" & filename
End If
Dim Aranini As New MyINI(INiFn)
Try
StartPos = Aranini.Read("NORMAL", "StartPos")
EndPos = Aranini.Read("NORMAL", "endpos")
Me.lb_file.Text = Aranini.Read("NORMAL", "file")
Me.lb_file.Text = Me.lb_file.Text.Trim(Chr(0))
Value = Aranini.Read("NORMAL", "value").Split(",")
'MaxArray = Aranini.Read("NORMAL", "MaxArray")
Catch ex As Exception
MsgBox("Err-Read_INI" & vbCrLf & vbCrLf & "File=" & INiFn _
& vbCrLf & ex.Message.ToString, MsgBoxStyle.Critical, "Error")
Return False
End Try
'Me.lb_file.Text = FN
Me.tb_scnt.Text = StartPos
Me.tb_ecnt.Text = EndPos
Return True
End Function
Private Sub ControlChanged(ByVal sender As Object, ByVal e As System.EventArgs) '//Not use
Dim A As Windows.Forms.TextBox = CType(sender, Windows.Forms.TextBox)
If A.Text.Length <= 0 Then Exit Sub
Select Case A.Text.Substring(0, 1)
Case ":"
If IsNumeric(A.Text.Substring(1)) Then
A.BackColor = Color.LawnGreen
Else
A.BackColor = Color.Tomato
End If
Case "?"
A.BackColor = Color.Gray
Case "#"
A.BackColor = Color.SteelBlue
Case Else
A.BackColor = Color.White
End Select
End Sub
Private Sub ReadXls(ByVal Filename As String) '//Read xls File
Me.CustFP1.OpenExcel(Filename)
For index As Integer = 0 To Me.CustFP1.Sheets.Count - 1
For Each Cl As FarPoint.Win.Spread.Column In Me.CustFP1.Sheets(index).Columns '//Set columns label
Cl.Label = Cl.Index + 1
Next
Next
''//연속 5개의 공백이 보이면 카운트를 종료한다.
Dim 공백 As Int16 = 0
For Each Row As FarPoint.Win.Spread.Row In Me.CustFP1.ActiveSheet.Rows
If Me.CustFP1.ActiveSheet.Cells(Row.Index, 0).Text = "" AndAlso Me.CustFP1.ActiveSheet.Cells(Row.Index, 1).Text = "" AndAlso Me.CustFP1.ActiveSheet.Cells(Row.Index, 2).Text = "" Then
' MsgBox(Row.Index)
공백 += 1
Else
공백 = 0
End If
If 공백 >= 10 Then
' MsgBox("종료시점검색완료" & Row.Index)
Me.CustFP1.ActiveSheet.RowCount = Row.Index + 1 - 8
Exit For
End If
Next
End Sub
Private Function GetItemFP(ByVal Src As FarPoint.Win.Spread.Row, ByVal idx As TextBox, ByVal SUbstr As TextBox, Optional ByVal NotNull As Boolean = False) As Object
Dim SUbidx As Integer = IIf(idx.Text = "", 0, Val(idx.Text)) '//없으면 -1을
If SUbidx = 0 Then '//즉 없다는뜻이다.
If NotNull Then Return Src.Index '//널이안되면 리뷰의 인덱스를 넘기고
Return "" '//널이되면 빈값을 리턴한다.
Else '//있다.
If SUbstr.Text = "" OrElse SUbstr.Text = "0,0" Then '//문자열자르기확인 없다 그대로 리턴
Return Me.CustFP1.ActiveSheet.Cells(Src.Index, CInt(SUbidx - 1)).Text
Else '//문자열자르기가 있으면 잘라서 보내준다.
Dim DIV() As String = SUbstr.Text.Split(",")
If DIV(1) = "0" Then '//시작부터 끝까지
Return Me.CustFP1.ActiveSheet.Cells(Src.Index, CInt(SUbidx - 1)).Text.Substring(DIV(0) - 1)
Else '/지정범위
Return Me.CustFP1.ActiveSheet.Cells(Src.Index, CInt(SUbidx - 1)).Text.Substring(DIV(0) - 1, DIV(1))
End If
End If
End If
End Function
Private Function GetFPData(ByVal sender As NewControlGroup.NewImpCnt2, ByVal Drow As FarPoint.Win.Spread.Row) As String
'//만약 날짜포맷이면 FORMAT 을 지정해서 사용한다"
Dim SUbidx As Integer
Dim VALSTR As String
If sender.열번호 = "" Then '//즉 없다는뜻이다.
Return ""
Else '//있다.
SUbidx = sender.열번호
If Me.CustFP1.ActiveSheet.Cells(Drow.Index, CInt(SUbidx - 1)).Text = "" Then
' MsgBox("값이없어서 바로보낸다")
Return "" '//데이터없으면 리턴
End If
If sender.문자열자르기 = "" OrElse sender.문자열자르기 = "0,0" Then '//문자열자르기확인 없다 그대로 리턴
VALSTR = Me.CustFP1.ActiveSheet.Cells(Drow.Index, CInt(SUbidx - 1)).Text
Return VALSTR
Else '//문자열자르기가 있으면 잘라서 보내준다.
Dim DIV() As String = sender.문자열자르기.Split(",")
If DIV(1) = "0" Then '//시작부터 끝까지
Try
VALSTR = (Me.CustFP1.ActiveSheet.Cells(Drow.Index, CInt(SUbidx - 1)).Text.Substring(DIV(0) - 1))
Catch ex As Exception
VALSTR = Me.CustFP1.ActiveSheet.Cells(Drow.Index, CInt(SUbidx - 1)).Text
End Try
Return VALSTR
Else '/지정범위
Try
VALSTR = Me.CustFP1.ActiveSheet.Cells(Drow.Index, CInt(SUbidx - 1)).Text.Substring(DIV(0) - 1, DIV(1))
Catch ex As Exception
VALSTR = Me.CustFP1.ActiveSheet.Cells(Drow.Index, CInt(SUbidx - 1)).Text
End Try
Return VALSTR
End If
End If
End If
End Function
Private Function NullCHeck() As Boolean
For i As Short = 0 To 18
If Me.Impctls(i).열번호 <> "" AndAlso Me.Impctls(i).enable AndAlso Me.Impctls(i).빈값체크 Then
Return True
End If
Next
Return False
End Function
Private Sub SHowCnt(ByVal cnt As Integer, ByVal maxcnt As Integer)
Me.lb_cnt.Text = cnt & "/" & maxcnt
My.Application.DoEvents()
End Sub
#End Region
Private Sub ToolStripButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton3.Click
Me.Close()
End Sub
End Class