123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
-
- Imports Excel = Microsoft.Office.Interop.Excel
- Public Class 匯入EXCEL
- Dim app As Excel.Application
- Dim book As Excel.Workbook
- Dim sheet As Excel.Worksheet
- Dim range As Excel.Range
- Dim dtable As DataTable = New DataTable()
- Dim OpenFileDialog As New OpenFileDialog
- Dim ii As Integer = 1 : Dim 全選_index As Integer = 1 : Dim 取消全選_index As Integer = 1
- Dim 首次開啟 As Boolean = False
- Dim EDR As Integer = 0 : Dim ESTR As String : Dim EDR1 As Integer = 0
-
- Private Sub 確認選擇月份()
- 紀錄Sheet年月_LBox.Items.Clear() : 紀錄選擇月份_LBox.Items.Clear()
- For Each E_node As TreeNode In 選擇_TreeView.Nodes
- If E_node.Checked = True Then
- 紀錄Sheet年月_LBox.Items.Add(E_node.Text)
- 紀錄選擇月份_LBox.Items.Add(ii)
- End If
- If E_node.Nodes.Count > 0 Then
- SelCheckNode(E_node)
- End If
- ii = ii + 1
- Next
- ii = 1
- End Sub
- Private Sub SelCheckNode(ByVal Val_node As TreeNode)
- For Each E_node As TreeNode In Val_node.Nodes
- If E_node.Checked = True Then
- 紀錄Sheet年月_LBox.Items.Add(E_node.Text)
- 紀錄選擇月份_LBox.Items.Add(ii)
- End If
- If E_node.Nodes.Count > 0 Then
- SelCheckNode(E_node)
- End If
- ii = ii + 1
- Next
- End Sub
- Private Sub 匯入EXCEL_人事資料讀取(ByVal NoColumns As Integer)
- ConnOpen() : SQL1 = "SELECT 流水號, 身分證, 舊編, 薪資帳號 FROM 人事資料表 WHERE (姓名 = N'" & Me.薪資匯入EXCEL_dgv(7, NoColumns).Value.ToString & "')"
- CmdSet_For_dr()
- dr.Read()
- If Me.薪資匯入EXCEL_dgv(7, NoColumns).Value.ToString <> Nothing And dr.HasRows = False Then
- 人事流水號_tb.Text = ""
- MessageBox.Show(Me.薪資匯入EXCEL_dgv(7, NoColumns).Value.ToString & " ,此人員不在人事資料中 !!!" + vbCrLf + "請追加人事資料", "重要訊息", MessageBoxButtons.OK, MessageBoxIcon.Warning)
- ElseIf dr.HasRows = True Then
- 人事流水號_tb.Text = dr("流水號").ToString()
- Else
- 人事流水號_tb.Text = ""
- End If
- If dr.HasRows = False Then
- 身分證_tb.Text = ""
- Else
- 身分證_tb.Text = dr("身分證").ToString()
- End If
- If dr.HasRows = False Then
- 薪資帳號_tb.Text = ""
- Else
- 薪資帳號_tb.Text = dr("薪資帳號").ToString()
- End If
- conn.Close()
- End Sub
- Private Sub 匯入_SQL_薪資轉帳表()
- Dim 薪資轉帳資料存在判斷 As Boolean
- 匯入Excel_PBar.Maximum = 薪資匯入EXCEL_dgv.Rows.Count - 1
- For k As Integer = 0 To 薪資匯入EXCEL_dgv.Rows.Count - 1 '--------------------自動取得DGV 欄位數
- 匯入EXCEL_人事資料讀取(k) ''--------------------由人事資料表讀出 (人事流水號, 身分證, 舊編, 薪資帳號)
- 薪資轉帳資料存在判斷 = 薪資轉帳表_資料重複判斷(k)
- If 薪資轉帳資料存在判斷 = True Then
- SQL_薪資轉帳表_流水號_最後一筆資料() '--------------------自動取得新流水號
- If dr.Read() Then : EDR = Double.Parse(Strings.Right(dr("流水號").ToString, 9)) : Else : EDR = 0 : End If
- conn.Close() : EDR += 1
- If EDR < 10 Then : ESTR = "M" & "00000000" & EDR
- ElseIf EDR > 9 And EDR < 100 Then : ESTR = "M" & "0000000" & EDR
- ElseIf EDR > 99 And EDR < 1000 Then : ESTR = "M" & "000000" & EDR
- ElseIf EDR > 999 And EDR < 10000 Then : ESTR = "M" & "00000" & EDR
- ElseIf EDR > 9999 And EDR < 100000 Then : ESTR = "M" & "0000" & EDR
- ElseIf EDR > 99999 And EDR < 100000 Then : ESTR = "M" & "000" & EDR
- ElseIf EDR > 999999 And EDR < 1000000 Then : ESTR = "M" & "00" & EDR
- ElseIf EDR > 9999999 And EDR < 10000000 Then : ESTR = "M" & "0" & EDR
- ElseIf EDR > 99999999 Then : ESTR = "M" & EDR
- End If : 流水號_tb.Text = ESTR
- SQL_薪資轉帳表_匯入EXCEL_新增(k) '--------------------薪資轉帳表中寫入一筆資料
- Else
- MessageBox.Show(薪資匯入EXCEL_dgv(7, k).Value.ToString & ",此人員" & 薪資匯入EXCEL_dgv(8, k).Value.ToString & "薪資資料已存在", "匯入訊息", MessageBoxButtons.OK, MessageBoxIcon.Information)
- End If
- If 匯入Excel_PBar.Value < 匯入Excel_PBar.Maximum Then : 匯入Excel_PBar.Value += 匯入Excel_PBar.Step : End If
- Next
- End Sub
- Private Function 薪資轉帳表_資料重複判斷(ByVal NoColumns As Integer) As Boolean
- Dim Val_return As Boolean
- ConnOpen()
- SQL1 = "SELECT 薪資轉帳表.流水號, 人事資料表.姓名, 薪資轉帳表.結算日期, 薪資轉帳表.人事資料流水號
- FROM 薪資轉帳表 LEFT OUTER JOIN
- 人事資料表 ON 薪資轉帳表.人事資料流水號 = 人事資料表.流水號
- WHERE (薪資轉帳表.結算日期 NOT LIKE '')
- AND (薪資轉帳表.結算日期 LIKE '" & 薪資匯入EXCEL_dgv(8, NoColumns).Value.ToString & "%" & "')
- AND (薪資轉帳表.人事資料流水號 LIKE '" & 人事流水號_tb.Text & "')
- ORDER BY 薪資轉帳表.流水號"
- 'AND (薪資轉帳表.結算日期 LIKE '" & Format(匯入EXCEL_dgv(8, NoColumns + 1).Value.ToString, "yyyy/MM/dd") & "%" & "')
- CmdSet_For_dr()
- dr.Read()
- If dr.HasRows = False Then
- Val_return = True
- ElseIf dr.HasRows = True Then
- Val_return = False
- End If
- conn.Close()
- Return Val_return
- End Function
-
- Private Sub 匯入EXCEL_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- 匯入EXCEL_bt.Enabled = True
- 薪資匯入EXCEL_dgv.DataSource = Nothing
- 薪資匯入EXCEL_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
- 薪資匯入EXCEL_dgv.ColumnHeadersHeight = 40
- 薪資匯入EXCEL_dgv.AllowUserToAddRows = False
- 匯入Excel_PBar.Maximum = 100 : 匯入Excel_PBar.Minimum = 0 : 匯入Excel_PBar.Value = 0
-
- OpenFileDialog1.FileName = ""
- OpenFileDialog1.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
-
- If (OpenFileDialog1.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then
- Dim FileName As String = OpenFileDialog1.FileName
-
- '在程式開始執行路徑取得 .xlsx
- app = New Excel.Application()
- app.DisplayAlerts = True
- app.Visible = False
- book = app.Workbooks.Open(FileName)
- sheet = book.Sheets(2)
- range = sheet.Cells(20, 10)
- sheet.Activate()
-
- Dim sh() As String
- Dim i As Integer
- i = -1
- Dim Val_sheet As Excel.Worksheet
- 選擇_TreeView.Nodes.Clear()
- For Each Val_sheet In book.Worksheets
- '在這您還可以加入您的需要,例如s1.name的名子有那些字再計算,本例是計算所有的
- i = i + 1
- ReDim Preserve sh(i)
- sh(i) = Val_sheet.Name
- 選擇_TreeView.Nodes.Add(sh(i))
- Next
- NAR(sheet) '關閉 Excel 工作表
- book.Close(False)
- NAR(book) '關閉 Excel 工作簿
- app.Quit() '關閉 Excel
- NAR(app) ''關閉 Excel 應用程式
- End If
- End Sub
- Private Sub 匯入EXCEL_Closed(sender As Object, e As EventArgs) Handles MyBase.Closed
- 薪資匯入EXCEL_dgv.DataSource = Nothing : dtable.Clear()
- End Sub
- Private Sub NAR(ByVal o As Object)
- Try
- System.Runtime.InteropServices.Marshal.ReleaseComObject(o)
- Catch
- Finally
- o = Nothing
- End Try
- End Sub
- Private Sub 匯入EXCEL_bt_Click(sender As Object, e As EventArgs) Handles 匯入EXCEL_bt.Click
- 確認選擇月份()
- dtable.Clear()
- 薪資匯入EXCEL_dgv.Columns.Clear()
- If 首次開啟 = False Then
- dtable.Clear()
- 薪資匯入EXCEL_dgv.Columns.Clear()
- dtable.Columns.Add("編號", System.Type.GetType("System.Int32"))
- dtable.Columns.Add("帳號", System.Type.GetType("System.String"))
- dtable.Columns.Add("身份證字號", System.Type.GetType("System.String"))
- dtable.Columns.Add("獎金", System.Type.GetType("System.Int32"))
- dtable.Columns.Add("薪資", System.Type.GetType("System.Int32"))
- dtable.Columns.Add("領現", System.Type.GetType("System.Int32"))
- dtable.Columns.Add("合計", System.Type.GetType("System.Int32"))
- dtable.Columns.Add("姓名", System.Type.GetType("System.String"))
- dtable.Columns.Add("結算日期", System.Type.GetType("System.String"))
- dtable.Columns.Add("給付方式", System.Type.GetType("System.String"))
- End If
- ' 在程式開始執行路徑取得 .xlsx
- Dim FileName As String = OpenFileDialog1.FileName
- app = New Excel.Application()
- app = CreateObject("Excel.Application")
- app.DisplayAlerts = False
- app.Visible = True
- book = app.Workbooks.Open(FileName)
-
- Dim dtrow As DataRow
- Dim j As Integer = 0
- For Each Items As Integer In 紀錄選擇月份_LBox.Items
- sheet = book.Sheets(Items)
- sheet.Activate()
- Dim rowNo As Int32 = 4
- Do
- If sheet.Cells(rowNo, 1).Value = Nothing Then
- Do
- If sheet.Cells(rowNo + 1, 7).Value = Nothing Then
- Exit Do
- Else
- dtrow = dtable.NewRow()
- dtrow("姓名") = sheet.Cells(rowNo + 1, 7).Value.ToString
- If sheet.Cells(rowNo + 1, 6).Value <> Nothing Then
- dtrow("領現") = sheet.Cells(rowNo + 1, 6).Value
- Else
- dtrow("領現") = 0
- End If
- Dim str_a As String = (191100 + 紀錄Sheet年月_LBox.Items(j)).ToString
- dtrow("結算日期") = str_a.Substring(0, 4) & "/" & str_a.Substring(4, 2) & "/25"
- dtrow("給付方式") = "領現"
- dtable.Rows.Add(dtrow)
- rowNo = rowNo + 1
- End If
- Loop
- Exit Do
- Else
- dtrow = dtable.NewRow()
- dtrow("編號") = sheet.Cells(rowNo, 1).Value
- dtrow("帳號") = sheet.Cells(rowNo, 2).Value.ToString
- dtrow("身份證字號") = sheet.Cells(rowNo, 3).Value.ToString
- dtrow("姓名") = sheet.Cells(rowNo, 7).Value.ToString
- If sheet.Cells(rowNo, 4).Value <> Nothing Then
- dtrow("獎金") = sheet.Cells(rowNo, 4).Value
- Else
- dtrow("獎金") = 0
- End If
- If sheet.Cells(rowNo, 5).Value <> Nothing Then
- dtrow("薪資") = sheet.Cells(rowNo, 5).Value
- Else
- dtrow("薪資") = 0
- End If
- If sheet.Cells(rowNo, 6).Value <> Nothing Then
- dtrow("合計") = sheet.Cells(rowNo, 6).Value
- Else
- dtrow("合計") = 0
- End If
-
- Dim str_a As String = (191100 + 紀錄Sheet年月_LBox.Items(j)).ToString
- dtrow("結算日期") = str_a.Substring(0, 4) & "/" & str_a.Substring(4, 2) & "/25"
- dtrow("給付方式") = "帳號匯款"
- dtable.Rows.Add(dtrow)
- rowNo = rowNo + 1
- End If
- Loop
- j = j + 1
- dtable.AcceptChanges()
- Next
- 首次開啟 = True
- 薪資匯入EXCEL_dgv.DataSource = dtable
- 匯入_SQL_薪資轉帳表()
- NAR(sheet) '關閉 Excel 工作表
- book.Close(False)
- NAR(book) '關閉 Excel 工作簿
- app.Quit() '關閉 Excel
- NAR(app) ''關閉 Excel 應用程式
- MessageBox.Show("匯入完成 !!!", "匯入訊息", MessageBoxButtons.OK, MessageBoxIcon.Information)
- 匯入EXCEL_bt.Enabled = False
- Me.Close()
- End Sub
- Private Sub 全選_bt_Click(sender As Object, e As EventArgs) Handles 全選_bt.Click
- For Each E_node As TreeNode In 選擇_TreeView.Nodes
- E_node.Checked = True
- If E_node.Nodes.Count > 0 Then
- SelAllCheck(E_node)
- End If
- 全選_index = 全選_index + 1
- Next
- End Sub
- Private Sub SelAllCheck(ByVal Val_node As TreeNode)
- For Each E_node As TreeNode In Val_node.Nodes
- E_node.Checked = True
- If E_node.Nodes.Count > 0 Then
- SelAllCheck(E_node)
- End If
- 全選_index = 全選_index + 1
- Next
- End Sub
- Private Sub 取消全選_bt_Click(sender As Object, e As EventArgs) Handles 取消全選_bt.Click
- For Each E_node As TreeNode In 選擇_TreeView.Nodes
- E_node.Checked = False
- If E_node.Nodes.Count > 0 Then
- CalAllCheck(E_node)
- End If
- 取消全選_index = 取消全選_index + 1
- Next
- End Sub
- Private Sub CalAllCheck(ByVal Val_node As TreeNode)
- For Each E_node As TreeNode In Val_node.Nodes
- E_node.Checked = False
- If E_node.Nodes.Count > 0 Then
- CalAllCheck(E_node)
- End If
- 取消全選_index = 取消全選_index + 1
- Next
- End Sub
- End Class
|