Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

匯入EXCEL.vb 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. 
  2. Imports Excel = Microsoft.Office.Interop.Excel
  3. Public Class 匯入EXCEL
  4. Dim app As Excel.Application
  5. Dim book As Excel.Workbook
  6. Dim sheet As Excel.Worksheet
  7. Dim range As Excel.Range
  8. Dim dtable As DataTable = New DataTable()
  9. Dim OpenFileDialog As New OpenFileDialog
  10. Dim ii As Integer = 1 : Dim 全選_index As Integer = 1 : Dim 取消全選_index As Integer = 1
  11. Dim 首次開啟 As Boolean = False
  12. Dim EDR As Integer = 0 : Dim ESTR As String : Dim EDR1 As Integer = 0
  13. Private Sub 確認選擇月份()
  14. 紀錄Sheet年月_LBox.Items.Clear() : 紀錄選擇月份_LBox.Items.Clear()
  15. For Each E_node As TreeNode In 選擇_TreeView.Nodes
  16. If E_node.Checked = True Then
  17. 紀錄Sheet年月_LBox.Items.Add(E_node.Text)
  18. 紀錄選擇月份_LBox.Items.Add(ii)
  19. End If
  20. If E_node.Nodes.Count > 0 Then
  21. SelCheckNode(E_node)
  22. End If
  23. ii = ii + 1
  24. Next
  25. ii = 1
  26. End Sub
  27. Private Sub SelCheckNode(ByVal Val_node As TreeNode)
  28. For Each E_node As TreeNode In Val_node.Nodes
  29. If E_node.Checked = True Then
  30. 紀錄Sheet年月_LBox.Items.Add(E_node.Text)
  31. 紀錄選擇月份_LBox.Items.Add(ii)
  32. End If
  33. If E_node.Nodes.Count > 0 Then
  34. SelCheckNode(E_node)
  35. End If
  36. ii = ii + 1
  37. Next
  38. End Sub
  39. Private Sub 匯入EXCEL_人事資料讀取(ByVal NoColumns As Integer)
  40. ConnOpen() : SQL1 = "SELECT 流水號, 身分證, 舊編, 薪資帳號 FROM 人事資料表 WHERE (姓名 = N'" & Me.薪資匯入EXCEL_dgv(7, NoColumns).Value.ToString & "')"
  41. CmdSet_For_dr()
  42. dr.Read()
  43. If Me.薪資匯入EXCEL_dgv(7, NoColumns).Value.ToString <> Nothing And dr.HasRows = False Then
  44. 人事流水號_tb.Text = ""
  45. MessageBox.Show(Me.薪資匯入EXCEL_dgv(7, NoColumns).Value.ToString & " ,此人員不在人事資料中 !!!" + vbCrLf + "請追加人事資料", "重要訊息", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  46. ElseIf dr.HasRows = True Then
  47. 人事流水號_tb.Text = dr("流水號").ToString()
  48. Else
  49. 人事流水號_tb.Text = ""
  50. End If
  51. If dr.HasRows = False Then
  52. 身分證_tb.Text = ""
  53. Else
  54. 身分證_tb.Text = dr("身分證").ToString()
  55. End If
  56. If dr.HasRows = False Then
  57. 薪資帳號_tb.Text = ""
  58. Else
  59. 薪資帳號_tb.Text = dr("薪資帳號").ToString()
  60. End If
  61. conn.Close()
  62. End Sub
  63. Private Sub 匯入_SQL_薪資轉帳表()
  64. Dim 薪資轉帳資料存在判斷 As Boolean
  65. 匯入Excel_PBar.Maximum = 薪資匯入EXCEL_dgv.Rows.Count - 1
  66. For k As Integer = 0 To 薪資匯入EXCEL_dgv.Rows.Count - 1 '--------------------自動取得DGV 欄位數
  67. 匯入EXCEL_人事資料讀取(k) ''--------------------由人事資料表讀出 (人事流水號, 身分證, 舊編, 薪資帳號)
  68. 薪資轉帳資料存在判斷 = 薪資轉帳表_資料重複判斷(k)
  69. If 薪資轉帳資料存在判斷 = True Then
  70. SQL_薪資轉帳表_流水號_最後一筆資料() '--------------------自動取得新流水號
  71. If dr.Read() Then : EDR = Double.Parse(Strings.Right(dr("流水號").ToString, 9)) : Else : EDR = 0 : End If
  72. conn.Close() : EDR += 1
  73. If EDR < 10 Then : ESTR = "M" & "00000000" & EDR
  74. ElseIf EDR > 9 And EDR < 100 Then : ESTR = "M" & "0000000" & EDR
  75. ElseIf EDR > 99 And EDR < 1000 Then : ESTR = "M" & "000000" & EDR
  76. ElseIf EDR > 999 And EDR < 10000 Then : ESTR = "M" & "00000" & EDR
  77. ElseIf EDR > 9999 And EDR < 100000 Then : ESTR = "M" & "0000" & EDR
  78. ElseIf EDR > 99999 And EDR < 100000 Then : ESTR = "M" & "000" & EDR
  79. ElseIf EDR > 999999 And EDR < 1000000 Then : ESTR = "M" & "00" & EDR
  80. ElseIf EDR > 9999999 And EDR < 10000000 Then : ESTR = "M" & "0" & EDR
  81. ElseIf EDR > 99999999 Then : ESTR = "M" & EDR
  82. End If : 流水號_tb.Text = ESTR
  83. SQL_薪資轉帳表_匯入EXCEL_新增(k) '--------------------薪資轉帳表中寫入一筆資料
  84. Else
  85. MessageBox.Show(薪資匯入EXCEL_dgv(7, k).Value.ToString & ",此人員" & 薪資匯入EXCEL_dgv(8, k).Value.ToString & "薪資資料已存在", "匯入訊息", MessageBoxButtons.OK, MessageBoxIcon.Information)
  86. End If
  87. If 匯入Excel_PBar.Value < 匯入Excel_PBar.Maximum Then : 匯入Excel_PBar.Value += 匯入Excel_PBar.Step : End If
  88. Next
  89. End Sub
  90. Private Function 薪資轉帳表_資料重複判斷(ByVal NoColumns As Integer) As Boolean
  91. Dim Val_return As Boolean
  92. ConnOpen()
  93. SQL1 = "SELECT 薪資轉帳表.流水號, 人事資料表.姓名, 薪資轉帳表.結算日期, 薪資轉帳表.人事資料流水號
  94. FROM 薪資轉帳表 LEFT OUTER JOIN
  95. 人事資料表 ON 薪資轉帳表.人事資料流水號 = 人事資料表.流水號
  96. WHERE (薪資轉帳表.結算日期 NOT LIKE '')
  97. AND (薪資轉帳表.結算日期 LIKE '" & 薪資匯入EXCEL_dgv(8, NoColumns).Value.ToString & "%" & "')
  98. AND (薪資轉帳表.人事資料流水號 LIKE '" & 人事流水號_tb.Text & "')
  99. ORDER BY 薪資轉帳表.流水號"
  100. 'AND (薪資轉帳表.結算日期 LIKE '" & Format(匯入EXCEL_dgv(8, NoColumns + 1).Value.ToString, "yyyy/MM/dd") & "%" & "')
  101. CmdSet_For_dr()
  102. dr.Read()
  103. If dr.HasRows = False Then
  104. Val_return = True
  105. ElseIf dr.HasRows = True Then
  106. Val_return = False
  107. End If
  108. conn.Close()
  109. Return Val_return
  110. End Function
  111. Private Sub 匯入EXCEL_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  112. 匯入EXCEL_bt.Enabled = True
  113. 薪資匯入EXCEL_dgv.DataSource = Nothing
  114. 薪資匯入EXCEL_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  115. 薪資匯入EXCEL_dgv.ColumnHeadersHeight = 40
  116. 薪資匯入EXCEL_dgv.AllowUserToAddRows = False
  117. 匯入Excel_PBar.Maximum = 100 : 匯入Excel_PBar.Minimum = 0 : 匯入Excel_PBar.Value = 0
  118. OpenFileDialog1.FileName = ""
  119. OpenFileDialog1.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
  120. If (OpenFileDialog1.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then
  121. Dim FileName As String = OpenFileDialog1.FileName
  122. '在程式開始執行路徑取得 .xlsx
  123. app = New Excel.Application()
  124. app.DisplayAlerts = True
  125. app.Visible = False
  126. book = app.Workbooks.Open(FileName)
  127. sheet = book.Sheets(2)
  128. range = sheet.Cells(20, 10)
  129. sheet.Activate()
  130. Dim sh() As String
  131. Dim i As Integer
  132. i = -1
  133. Dim Val_sheet As Excel.Worksheet
  134. 選擇_TreeView.Nodes.Clear()
  135. For Each Val_sheet In book.Worksheets
  136. '在這您還可以加入您的需要,例如s1.name的名子有那些字再計算,本例是計算所有的
  137. i = i + 1
  138. ReDim Preserve sh(i)
  139. sh(i) = Val_sheet.Name
  140. 選擇_TreeView.Nodes.Add(sh(i))
  141. Next
  142. NAR(sheet) '關閉 Excel 工作表
  143. book.Close(False)
  144. NAR(book) '關閉 Excel 工作簿
  145. app.Quit() '關閉 Excel
  146. NAR(app) ''關閉 Excel 應用程式
  147. End If
  148. End Sub
  149. Private Sub 匯入EXCEL_Closed(sender As Object, e As EventArgs) Handles MyBase.Closed
  150. 薪資匯入EXCEL_dgv.DataSource = Nothing : dtable.Clear()
  151. End Sub
  152. Private Sub NAR(ByVal o As Object)
  153. Try
  154. System.Runtime.InteropServices.Marshal.ReleaseComObject(o)
  155. Catch
  156. Finally
  157. o = Nothing
  158. End Try
  159. End Sub
  160. Private Sub 匯入EXCEL_bt_Click(sender As Object, e As EventArgs) Handles 匯入EXCEL_bt.Click
  161. 確認選擇月份()
  162. dtable.Clear()
  163. 薪資匯入EXCEL_dgv.Columns.Clear()
  164. If 首次開啟 = False Then
  165. dtable.Clear()
  166. 薪資匯入EXCEL_dgv.Columns.Clear()
  167. dtable.Columns.Add("編號", System.Type.GetType("System.Int32"))
  168. dtable.Columns.Add("帳號", System.Type.GetType("System.String"))
  169. dtable.Columns.Add("身份證字號", System.Type.GetType("System.String"))
  170. dtable.Columns.Add("獎金", System.Type.GetType("System.Int32"))
  171. dtable.Columns.Add("薪資", System.Type.GetType("System.Int32"))
  172. dtable.Columns.Add("領現", System.Type.GetType("System.Int32"))
  173. dtable.Columns.Add("合計", System.Type.GetType("System.Int32"))
  174. dtable.Columns.Add("姓名", System.Type.GetType("System.String"))
  175. dtable.Columns.Add("結算日期", System.Type.GetType("System.String"))
  176. dtable.Columns.Add("給付方式", System.Type.GetType("System.String"))
  177. End If
  178. ' 在程式開始執行路徑取得 .xlsx
  179. Dim FileName As String = OpenFileDialog1.FileName
  180. app = New Excel.Application()
  181. app = CreateObject("Excel.Application")
  182. app.DisplayAlerts = False
  183. app.Visible = True
  184. book = app.Workbooks.Open(FileName)
  185. Dim dtrow As DataRow
  186. Dim j As Integer = 0
  187. For Each Items As Integer In 紀錄選擇月份_LBox.Items
  188. sheet = book.Sheets(Items)
  189. sheet.Activate()
  190. Dim rowNo As Int32 = 4
  191. Do
  192. If sheet.Cells(rowNo, 1).Value = Nothing Then
  193. Do
  194. If sheet.Cells(rowNo + 1, 7).Value = Nothing Then
  195. Exit Do
  196. Else
  197. dtrow = dtable.NewRow()
  198. dtrow("姓名") = sheet.Cells(rowNo + 1, 7).Value.ToString
  199. If sheet.Cells(rowNo + 1, 6).Value <> Nothing Then
  200. dtrow("領現") = sheet.Cells(rowNo + 1, 6).Value
  201. Else
  202. dtrow("領現") = 0
  203. End If
  204. Dim str_a As String = (191100 + 紀錄Sheet年月_LBox.Items(j)).ToString
  205. dtrow("結算日期") = str_a.Substring(0, 4) & "/" & str_a.Substring(4, 2) & "/25"
  206. dtrow("給付方式") = "領現"
  207. dtable.Rows.Add(dtrow)
  208. rowNo = rowNo + 1
  209. End If
  210. Loop
  211. Exit Do
  212. Else
  213. dtrow = dtable.NewRow()
  214. dtrow("編號") = sheet.Cells(rowNo, 1).Value
  215. dtrow("帳號") = sheet.Cells(rowNo, 2).Value.ToString
  216. dtrow("身份證字號") = sheet.Cells(rowNo, 3).Value.ToString
  217. dtrow("姓名") = sheet.Cells(rowNo, 7).Value.ToString
  218. If sheet.Cells(rowNo, 4).Value <> Nothing Then
  219. dtrow("獎金") = sheet.Cells(rowNo, 4).Value
  220. Else
  221. dtrow("獎金") = 0
  222. End If
  223. If sheet.Cells(rowNo, 5).Value <> Nothing Then
  224. dtrow("薪資") = sheet.Cells(rowNo, 5).Value
  225. Else
  226. dtrow("薪資") = 0
  227. End If
  228. If sheet.Cells(rowNo, 6).Value <> Nothing Then
  229. dtrow("合計") = sheet.Cells(rowNo, 6).Value
  230. Else
  231. dtrow("合計") = 0
  232. End If
  233. Dim str_a As String = (191100 + 紀錄Sheet年月_LBox.Items(j)).ToString
  234. dtrow("結算日期") = str_a.Substring(0, 4) & "/" & str_a.Substring(4, 2) & "/25"
  235. dtrow("給付方式") = "帳號匯款"
  236. dtable.Rows.Add(dtrow)
  237. rowNo = rowNo + 1
  238. End If
  239. Loop
  240. j = j + 1
  241. dtable.AcceptChanges()
  242. Next
  243. 首次開啟 = True
  244. 薪資匯入EXCEL_dgv.DataSource = dtable
  245. 匯入_SQL_薪資轉帳表()
  246. NAR(sheet) '關閉 Excel 工作表
  247. book.Close(False)
  248. NAR(book) '關閉 Excel 工作簿
  249. app.Quit() '關閉 Excel
  250. NAR(app) ''關閉 Excel 應用程式
  251. MessageBox.Show("匯入完成 !!!", "匯入訊息", MessageBoxButtons.OK, MessageBoxIcon.Information)
  252. 匯入EXCEL_bt.Enabled = False
  253. Me.Close()
  254. End Sub
  255. Private Sub 全選_bt_Click(sender As Object, e As EventArgs) Handles 全選_bt.Click
  256. For Each E_node As TreeNode In 選擇_TreeView.Nodes
  257. E_node.Checked = True
  258. If E_node.Nodes.Count > 0 Then
  259. SelAllCheck(E_node)
  260. End If
  261. 全選_index = 全選_index + 1
  262. Next
  263. End Sub
  264. Private Sub SelAllCheck(ByVal Val_node As TreeNode)
  265. For Each E_node As TreeNode In Val_node.Nodes
  266. E_node.Checked = True
  267. If E_node.Nodes.Count > 0 Then
  268. SelAllCheck(E_node)
  269. End If
  270. 全選_index = 全選_index + 1
  271. Next
  272. End Sub
  273. Private Sub 取消全選_bt_Click(sender As Object, e As EventArgs) Handles 取消全選_bt.Click
  274. For Each E_node As TreeNode In 選擇_TreeView.Nodes
  275. E_node.Checked = False
  276. If E_node.Nodes.Count > 0 Then
  277. CalAllCheck(E_node)
  278. End If
  279. 取消全選_index = 取消全選_index + 1
  280. Next
  281. End Sub
  282. Private Sub CalAllCheck(ByVal Val_node As TreeNode)
  283. For Each E_node As TreeNode In Val_node.Nodes
  284. E_node.Checked = False
  285. If E_node.Nodes.Count > 0 Then
  286. CalAllCheck(E_node)
  287. End If
  288. 取消全選_index = 取消全選_index + 1
  289. Next
  290. End Sub
  291. End Class