Nenhuma descrição
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

文件.vb 35KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607
  1. Option Strict Off
  2. Imports Microsoft.Office.Interop.Excel.XlUnderlineStyle
  3. Imports Microsoft.Office.Interop.Excel.Constants
  4. Imports Microsoft.Office.Interop.Excel.XlBordersIndex
  5. Imports Microsoft.Office.Interop.Excel.XlLineStyle
  6. Imports Microsoft.Office.Interop.Excel.XlBorderWeight
  7. Imports Microsoft.Office.Interop.Excel.XlThemeFont
  8. Imports Microsoft.Office.Interop.Excel.XlThemeColor
  9. Imports Microsoft.Office.Interop.Excel.XlWindowState
  10. Imports Microsoft.Office.Interop.Excel
  11. Imports System.IO
  12. Imports Telerik.Windows.Documents.Fixed
  13. Imports System.Text.RegularExpressions
  14. Imports Telerik.WinControls.VirtualKeyboard
  15. Public Class 文件
  16. Dim xlApp As Microsoft.Office.Interop.Excel.Application
  17. Dim xlBook As Microsoft.Office.Interop.Excel.Workbook
  18. Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet
  19. Dim 位置1 As String : Dim 已處理字串 As String
  20. Dim N2 As Integer : Dim N3 As Integer
  21. ReadOnly ds As New DataSet : ReadOnly ds1 As New DataSet : ReadOnly ds2 As New DataSet
  22. Dim 圖片資料庫指定, WW(14), WA(14) As String
  23. Dim DGVX As Integer
  24. Private Sub 文件_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  25. Me.MdiParent = GRAMS_SYS : Me.WindowState = 2 : Me.AutoScroll = True
  26. RadPdfViewerNavigator1.OpenButton.Visibility = Telerik.WinControls.ElementVisibility.Collapsed
  27. RadPdfViewerNavigator1.SaveButton.Visibility = Telerik.WinControls.ElementVisibility.Collapsed
  28. PDF_P.BringToFront()
  29. 已核准的營運成本收支單_rb.Checked = True
  30. 作廢的營運成本收支單_rb.Checked = False
  31. Set_清單1() : Set_清單3()
  32. 刪除_bt.Enabled = False : 儲存_bt.Enabled = False : 作廢_bt.Enabled = False : 列印_bt.Enabled = False : 發行_bt.Enabled = False : 指定人員_bt.Enabled = False
  33. End Sub
  34. Private Sub 文件_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
  35. SQL_圖片資料庫查詢() : If dr.Read() Then : 圖片資料庫指定 = dr("圖片資料庫") : Else : MsgBox("圖片資料庫已滿,請聯繫系統管理員!!!") : Me.Close() : End If
  36. If 圖片庫_tb.Text = "" Then : 圖片庫 = 圖片資料庫指定 : Else : 圖片庫 = 圖片庫_tb.Text : End If
  37. End Sub
  38. Private Sub 文件_Closed(sender As Object, e As EventArgs) Handles MyBase.Closed
  39. SQL_文件沒存檔的全部存檔()
  40. End Sub
  41. Private Sub Set_清單3()
  42. Dim ds As New DataSet
  43. 人員1_dgv.DataSource = Nothing : ds.Clear()
  44. 人員1_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  45. 人員1_dgv.ColumnHeadersHeight = 25
  46. 人員1_dgv.AllowUserToAddRows = False
  47. SQL_通用_人員清單()
  48. da.Fill(ds) : 人員1_dgv.DataSource = ds.Tables(0) : conn.Close()
  49. Dim chkColumn As New DataGridViewCheckBoxColumn()
  50. End Sub
  51. Private Sub Set_清單1()
  52. 控制表_dgv.DataSource = Nothing : ds1.Clear()
  53. 控制表_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  54. 控制表_dgv.ColumnHeadersHeight = 25
  55. 控制表_dgv.AllowUserToAddRows = False
  56. 控制表_dgv.RowTemplate.Height = 30
  57. If conn.State = ConnectionState.Closed Then : conn.ConnectionString = ConString : conn.Open() : End If
  58. If 作廢的營運成本收支單_rb.Checked = True And 已核准的營運成本收支單_rb.Checked = False And 已發行的營運成本收支單_rb.Checked = False Then
  59. SQL_通用_控制表清單1()
  60. ElseIf 作廢的營運成本收支單_rb.Checked = False And 已核准的營運成本收支單_rb.Checked = True And 已發行的營運成本收支單_rb.Checked = False Then
  61. SQL_通用_控制表清單()
  62. ElseIf 作廢的營運成本收支單_rb.Checked = False And 已核准的營運成本收支單_rb.Checked = False And 已發行的營運成本收支單_rb.Checked = True Then
  63. SQL_通用_控制表清單2()
  64. End If
  65. da.Fill(ds1) : 控制表_dgv.DataSource = ds1.Tables(0) : conn.Close()
  66. 控制表_dgv.Columns(0).Visible = False : 控制表_dgv.Columns(1).FillWeight = 60 : 控制表_dgv.Columns(2).Visible = False
  67. 控制表_dgv.Columns(3).Visible = False : 控制表_dgv.Columns(4).Visible = False : 控制表_dgv.Columns(5).Visible = False
  68. 控制表_dgv.Columns(6).Visible = False : 控制表_dgv.Columns(7).Visible = False : 控制表_dgv.Columns(8).Visible = False
  69. 控制表_dgv.Columns(9).Visible = False : 控制表_dgv.Columns(10).Visible = False
  70. End Sub
  71. Private Sub Set_清單2()
  72. 人員_dgv.DataSource = Nothing : ds2.Clear()
  73. 人員_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  74. 人員_dgv.ColumnHeadersHeight = 25
  75. 人員_dgv.AllowUserToAddRows = False
  76. 人員_dgv.RowTemplate.Height = 50
  77. If conn.State = ConnectionState.Closed Then : conn.ConnectionString = ConString : conn.Open() : End If
  78. SQL_通用_明細表讀取()
  79. da.Fill(ds2) : 人員_dgv.DataSource = ds2.Tables(0) : conn.Close()
  80. 人員_dgv.Columns(0).Visible = False : 人員_dgv.Columns(1).FillWeight = 20 : 人員_dgv.Columns(2).Visible = False
  81. 人員_dgv.Columns(3).Visible = False : 人員_dgv.Columns(4).FillWeight = 50 : 人員_dgv.Columns(5).FillWeight = 30
  82. Dim imgColumn As DataGridViewImageColumn = TryCast(人員_dgv.Columns("圖片"), DataGridViewImageColumn)
  83. If imgColumn IsNot Nothing Then
  84. imgColumn.ImageLayout = DataGridViewImageCellLayout.Zoom
  85. End If
  86. Dim transparentImage As New Bitmap(50, 50) ' Adjust size as needed
  87. Using g As Graphics = Graphics.FromImage(transparentImage)
  88. g.Clear(Color.Transparent)
  89. End Using
  90. For i As Integer = 0 To 人員_dgv.Rows.Count - 1
  91. If 人員_dgv.Rows(i).Cells("圖片資料庫").Value.ToString <> "" And 人員_dgv.Rows(i).Cells("圖片流水號").Value.ToString <> "" Then
  92. 圖片庫 = 人員_dgv.Rows(i).Cells("圖片資料庫").Value.ToString
  93. SQL_連線字串_圖片資料庫()
  94. PA2 = 人員_dgv.Rows(i).Cells("圖片流水號").Value.ToString
  95. SQL_簽名圖()
  96. While dr.Read() = True
  97. Dim unused As Byte() = New Byte(-1) {} : Dim bytes As Byte() = DirectCast(dr.Item("圖片"), Byte())
  98. Dim oStream As New MemoryStream(bytes) : 人員_dgv.Rows(i).Cells("圖片").Value = Bitmap.FromStream(oStream)
  99. End While : conn.Close()
  100. Else
  101. ' Set empty value if no image is available
  102. 人員_dgv.Rows(i).Cells("圖片").Value = transparentImage
  103. End If
  104. Next
  105. End Sub
  106. Private Sub 控制表_dgv_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles 控制表_dgv.CellClick
  107. If e.RowIndex = -1 Then : Else
  108. 單號_tb.Text = 控制表_dgv(2, e.RowIndex).Value.ToString
  109. Dim dateString As String = 控制表_dgv(0, e.RowIndex).Value.ToString
  110. Dim dateParts() As String = dateString.Split("/"c)
  111. Dim year As Integer = Integer.Parse(dateParts(0)) + 1911 ' 將民國年轉換為西元年
  112. Dim month As Integer = Integer.Parse(dateParts(1))
  113. Dim day As Integer = Integer.Parse(dateParts(2))
  114. Dim dateTime As New DateTime(year, month, day)
  115. 選擇日期_dtp.Value = dateTime
  116. 選擇日期_dtp.CustomFormat = "yyyy/MM/dd"
  117. 選擇日期_dtp.Format = DateTimePickerFormat.Custom
  118. 檔案名稱_tb.Text = 控制表_dgv(1, e.RowIndex).Value.ToString
  119. 主旨_tb.Text = 控制表_dgv(3, e.RowIndex).Value.ToString
  120. 說明_tb.Text = 控制表_dgv(4, e.RowIndex).Value.ToString
  121. 開單人_tb.Text = 控制表_dgv("開單人", e.RowIndex).Value.ToString
  122. 全選_cb.Checked = 控制表_dgv("全選", e.RowIndex).Value
  123. 圖片庫_tb.Text = 控制表_dgv("圖片庫", e.RowIndex).Value.ToString
  124. PA57 = 單號_tb.Text : Set_清單2()
  125. If (全選_cb.Checked = True) Then
  126. For I As Integer = 0 To 人員1_dgv.Rows.Count - 1
  127. Dim skip As Boolean = False ' 用于标记是否跳过当前外层循环
  128. For II As Integer = 0 To 人員_dgv.Rows.Count - 1
  129. If 人員1_dgv.Rows(I).Cells("姓名").Value.ToString() = 人員_dgv.Rows(II).Cells("姓名").Value.ToString() Then
  130. skip = True ' 标记跳过当前外层循环
  131. Exit For ' 跳出内层循环
  132. End If
  133. Next
  134. If skip Then
  135. Continue For ' 跳过当前外层循环的当前迭代
  136. End If
  137. PA58 = 人員1_dgv.Rows(I).Cells("姓名").Value.ToString() : SQL_通用_明細表新增()
  138. Next : Set_清單2()
  139. End If
  140. 刪除_bt.Enabled = True : 儲存_bt.Enabled = True : 作廢_bt.Enabled = True : 列印_bt.Enabled = True : 發行_bt.Enabled = True : 指定人員_bt.Enabled = True
  141. PA1 = 單號_tb.Text : 圖片_pb.Image = Nothing : 圖片1_pb.Image = Nothing : Set_文件圖片()
  142. End If
  143. End Sub
  144. Private Sub 查詢_tb_Click(sender As Object, e As EventArgs) Handles 查詢_tb.Click
  145. PA56 = InputBox("請輸入要查詢的單號資料。") : Set_清單1() : PA56 = ""
  146. End Sub
  147. Private Sub 檔案名稱_tb_KeyPress(sender As Object, e As KeyPressEventArgs) Handles 檔案名稱_tb.KeyPress
  148. If Not Char.IsLetterOrDigit(e.KeyChar) AndAlso Not Char.IsWhiteSpace(e.KeyChar) Then
  149. e.Handled = True
  150. End If
  151. End Sub
  152. Private Sub 新增_bt_Click(sender As Object, e As EventArgs) Handles 新增_bt.Click
  153. 單號_tb.Text = "" : 檔案名稱_tb.Text = "" : 主旨_tb.Text = "" : 說明_tb.Text = "" : 開單人_tb.Text = gUserName : 全選_cb.Checked = False
  154. Dim NUM1 As Integer
  155. Dim dat1 As String
  156. 選擇日期_dtp.Value = DateTime.Now
  157. Dim selectedDate As DateTime = 選擇日期_dtp.Value
  158. Dim taiwanYear As Integer = selectedDate.Year - 1911
  159. Dim str As String = String.Format("{0}{1:00}{2:00}", taiwanYear, selectedDate.Month, selectedDate.Day)
  160. PA1 = String.Format("{0}/{1:00}/{2:00}", taiwanYear, selectedDate.Month, selectedDate.Day)
  161. SQL_通用_查詢第一筆單號()
  162. If dr.Read() Then : 單號_tb.Text = dr("流水號").ToString : Else : 單號_tb.Text = str & "00" : End If
  163. dat1 = 單號_tb.Text.Substring(0, 7)
  164. If dat1 <> str Then : NUM1 = 1 : Else : NUM1 = Double.Parse(單號_tb.Text.Substring(7, 2)) + 1 : End If
  165. If NUM1 < 10 Then : 單號_tb.Text = str & "0" & NUM1
  166. ElseIf NUM1 > 9 Then : 單號_tb.Text = str & NUM1
  167. End If
  168. PA = 單號_tb.Text : PA10 = 圖片資料庫指定 : 檔案名稱_tb.Text = InputBox("請輸入要新建的文件名稱!!")
  169. SQL_通用_新增一筆公函控制表(檔案名稱_tb.Text, 圖片資料庫指定) : conn.Close()
  170. PA57 = "" : Set_清單2()
  171. 刪除_bt.Enabled = True : 儲存_bt.Enabled = True : 作廢_bt.Enabled = True : 列印_bt.Enabled = True : 發行_bt.Enabled = True : 指定人員_bt.Enabled = True
  172. End Sub
  173. Private Sub 刪除_bt_Click(sender As Object, e As EventArgs) Handles 刪除_bt.Click
  174. If 單號_tb.Text = "" Then : MsgBox("請先選擇文件檔案名稱!!") : Else
  175. Dim result As DialogResult = MsgBox("是否要刪除該筆資料?", MessageBoxButtons.OKCancel)
  176. If result = DialogResult.OK Then
  177. If 圖片庫_tb.Text = "" Then : 圖片庫 = 圖片資料庫指定 : Else : 圖片庫 = 圖片庫_tb.Text : End If
  178. SQL_連線字串_圖片資料庫() : SQL_文件圖片刪除()
  179. PA57 = 單號_tb.Text : SQL_通用_明細表刪除()
  180. SQL_通用_控制表刪除(單號_tb.Text) : conn.Close() : MsgBox("刪除成功!!")
  181. 單號_tb.Text = "" : 檔案名稱_tb.Text = "" : 主旨_tb.Text = "" : 說明_tb.Text = "" : 開單人_tb.Text = ""
  182. Set_清單1() : Set_清單2()
  183. Set_文件圖片() : 圖片_pb.Image = Nothing : 圖片1_pb.Image = Nothing
  184. 刪除_bt.Enabled = False : 儲存_bt.Enabled = False : 作廢_bt.Enabled = False : 列印_bt.Enabled = False : 發行_bt.Enabled = False : 指定人員_bt.Enabled = False
  185. End If
  186. End If
  187. End Sub
  188. Private Sub 儲存_bt_Click(sender As Object, e As EventArgs) Handles 儲存_bt.Click
  189. If 檔案名稱_tb.Text = "" Then : MsgBox("檔案名稱不可以空白!!") : Else
  190. PA57 = 單號_tb.Text
  191. If (全選_cb.Checked = True) Then
  192. If 人員1_dgv.Rows.Count < 1 Then
  193. For I As Integer = 0 To 人員1_dgv.Rows.Count - 1
  194. PA58 = 人員1_dgv.Rows(I).Cells("姓名").Value.ToString() : SQL_通用_明細表新增()
  195. Next
  196. Else
  197. For I As Integer = 0 To 人員1_dgv.Rows.Count - 1 : Dim skip As Boolean = False ' 用于标记是否跳过当前外层循环
  198. For II As Integer = 0 To 人員_dgv.Rows.Count - 1
  199. If 人員1_dgv.Rows(I).Cells("姓名").Value.ToString() = 人員_dgv.Rows(II).Cells("姓名").Value.ToString() Then
  200. skip = True ' 标记跳过当前外层循环
  201. Exit For ' 跳出内层循环
  202. End If
  203. Next
  204. If skip Then
  205. Continue For ' 跳过当前外层循环的当前迭代
  206. End If : PA58 = 人員1_dgv.Rows(I).Cells("姓名").Value.ToString() : SQL_通用_明細表新增()
  207. Next
  208. End If
  209. End If
  210. SQL_通用_控制表修改(檔案名稱_tb.Text, 主旨_tb.Text, 說明_tb.Text, 單號_tb.Text, 全選_cb.Checked) : conn.Close() : MsgBox("儲存成功!!") : Set_清單1() : Set_清單2()
  211. End If
  212. End Sub
  213. Private Sub 發行_bt_Click(sender As Object, e As EventArgs) Handles 發行_bt.Click
  214. SQL_通用_控制表發行(單號_tb.Text) : conn.Close() : MsgBox("發行成功!!") : Set_清單1()
  215. End Sub
  216. Private Sub 作廢_bt_Click(sender As Object, e As EventArgs) Handles 作廢_bt.Click
  217. SQL_通用_控制表作廢(單號_tb.Text) : conn.Close() : MsgBox("作廢成功!!") : Set_清單1()
  218. End Sub
  219. Private Sub 編輯人員_bt_Click(sender As Object, e As EventArgs) Handles 指定人員_bt.Click
  220. 全選_cb.Checked = False
  221. PA57 = 單號_tb.Text : 選擇人員.ShowDialog() : Set_清單2()
  222. End Sub
  223. Private Sub 作廢的營運成本收支單_rb_CheckedChanged(sender As Object, e As EventArgs) Handles 作廢的營運成本收支單_rb.Click
  224. 作廢的營運成本收支單_rb.Checked = True : 已核准的營運成本收支單_rb.Checked = False : 已發行的營運成本收支單_rb.Checked = False
  225. Set_清單1()
  226. End Sub
  227. Private Sub 已核准的營運成本收支單_rb_CheckedChanged(sender As Object, e As EventArgs) Handles 已核准的營運成本收支單_rb.Click
  228. 作廢的營運成本收支單_rb.Checked = False : 已核准的營運成本收支單_rb.Checked = True : 已發行的營運成本收支單_rb.Checked = False
  229. Set_清單1()
  230. End Sub
  231. Private Sub 已發行的營運成本收支單_rb_CheckedChanged(sender As Object, e As EventArgs) Handles 已發行的營運成本收支單_rb.Click
  232. 作廢的營運成本收支單_rb.Checked = False : 已核准的營運成本收支單_rb.Checked = False : 已發行的營運成本收支單_rb.Checked = True
  233. Set_清單1()
  234. End Sub
  235. Private Sub 圖片清單_dgv_CellClick(ByVal sender As System.Object, ByVal e As DataGridViewCellEventArgs) Handles 圖片清單_dgv.CellClick
  236. If e.RowIndex = -1 Then : Else : DGVX = e.RowIndex : 圖片清單讀取() : End If
  237. End Sub
  238. Private Sub 物料圖_pb_Click(sender As Object, e As EventArgs) Handles 圖片_pb.Click
  239. If IsNothing(圖片_pb.Image) = False Then
  240. If 圖片清單_dgv.Rows(DGVX).Cells("File.").Value.ToString = "JPG" Then
  241. 圖片傳遞 = 圖片_pb.Image : 圖片放大視窗.ShowDialog()
  242. Else : If 圖片庫_tb.Text = "" Then : 圖片庫 = 圖片資料庫指定 : Else : 圖片庫 = 圖片庫_tb.Text : End If
  243. PA1 = 單號_tb.Text : PA2 = 圖片清單_dgv.Rows(DGVX).Cells("Item").Value : SQL_連線字串_圖片資料庫()
  244. Dim Str As String = System.Windows.Forms.Application.StartupPath : Dim ds1 As New DataSet : ds1.Clear() : SQL_文件圖片讀取1() : da.Fill(ds1)
  245. If ds1.Tables(0).Rows.Count > 0 Then
  246. Dim imgData() As Byte : imgData = ds1.Tables(0).Rows(0).Item("圖片")
  247. Dim fs As FileStream : fs = File.Create(Str + "\" & PA2 & ".pdf", imgData.Length - 1)
  248. fs.Write(imgData, 0, imgData.Length - 1) : fs.Close()
  249. End If : conn.Close() : PDF路徑 = Str + "\" & PA2 & ".pdf" : PDF預覽.ShowDialog()
  250. End If
  251. End If
  252. End Sub
  253. Private Sub 圖檔入系統_rbt_Click(sender As Object, e As EventArgs) Handles 圖檔入系統_rbt.Click
  254. If 單號_tb.Text = "" Then : MsgBox("請先選擇會議/專案項目!!") : Else : If 圖片庫_tb.Text = "" Then : 圖片庫 = 圖片資料庫指定 : Else : 圖片庫 = 圖片庫_tb.Text : End If
  255. PA1 = 單號_tb.Text : SQL_連線字串_圖片資料庫()
  256. For i As Integer = 0 To NU1
  257. If WW(i) = "" Then : Else
  258. Dim 文件號 As String : Dim 文件編號 As Integer : SQL_文件圖片最後一筆編號查詢()
  259. If dr.Read() Then : 文件編號 = Double.Parse(Strings.Right(dr("項次").ToString, 2)) : Else : 文件編號 = 0 : End If
  260. conn.Close() : 文件編號 += 1
  261. If 文件編號 < 10 Then : 文件號 = "IM" & "0" & 文件編號
  262. ElseIf 文件編號 > 9 Then : 文件號 = "IM" & 文件編號 : End If
  263. PA2 = 文件號 : PA49 = WW(i) : PA3 = WA(i) : SQL_文件圖片入系統()
  264. End If
  265. Next
  266. For i As Integer = 0 To 5 : WW(i) = "" : Dim 選擇 As PictureBox = CType(Me.Controls.Find("PB" & i + 1, True)(0), PictureBox) : 選擇.Image = Nothing : Next
  267. Set_文件圖片() : MsgBox("上傳完畢!!")
  268. End If
  269. End Sub
  270. Private Sub Set_文件圖片()
  271. Dim ds6 As New DataSet : 圖片清單_dgv.DataSource = Nothing : ds6.Clear()
  272. 圖片清單_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  273. 圖片清單_dgv.ColumnHeadersHeight = 25 : 圖片清單_dgv.AllowUserToAddRows = False
  274. If 圖片庫_tb.Text = "" Then : 圖片庫 = 圖片資料庫指定 : Else : 圖片庫 = 圖片庫_tb.Text : End If
  275. SQL_連線字串_圖片資料庫() : SQL_文件圖片()
  276. da.Fill(ds6) : 圖片清單_dgv.DataSource = ds6.Tables(0) : conn.Close()
  277. 圖片清單_dgv.Columns(0).ReadOnly = True
  278. If 圖片清單_dgv.Rows.Count > 0 Then : DGVX = 0 : 圖片清單讀取() : TabControl1.SelectedIndex = 0 : Else
  279. If 說明_tb.Text = "" Then
  280. 圖片_pb.Image = Nothing : 圖片1_pb.Image = Nothing : 圖片_P.BringToFront()
  281. 圖片1_pb.Image = My.Resources.無檔案 : 圖片_pb.SizeMode = 4
  282. TabControl1.SelectedIndex = 0
  283. Else
  284. TabControl1.SelectedIndex = 1
  285. End If
  286. End If
  287. End Sub
  288. Private Sub 圖片清單讀取()
  289. If 圖片庫_tb.Text = "" Then : 圖片庫 = 圖片資料庫指定 : Else : 圖片庫 = 圖片庫_tb.Text : End If
  290. 圖片_pb.Image = Nothing : 圖片1_pb.Image = Nothing : PA1 = 單號_tb.Text : SQL_連線字串_圖片資料庫()
  291. PA2 = 圖片清單_dgv.Rows(DGVX).Cells("Item").Value
  292. If 圖片清單_dgv.Rows(DGVX).Cells("File.").Value.ToString = "JPG" Then : 圖片_P.BringToFront()
  293. SQL_文件圖片讀取()
  294. While dr.Read() = True
  295. Dim unused As Byte() = New Byte(-1) {}
  296. Dim bytes As Byte() = DirectCast(dr.Item("圖片"), Byte())
  297. Dim oStream As New MemoryStream(bytes)
  298. 圖片_pb.Image = Bitmap.FromStream(oStream)
  299. 圖片1_pb.Image = Bitmap.FromStream(oStream)
  300. End While : conn.Close() : 圖片_pb.SizeMode = 4 : 圖片1_pb.SizeMode = 4
  301. ElseIf 圖片清單_dgv.Rows(DGVX).Cells("File.").Value.ToString <> "JPG" Then : PDF_P.BringToFront()
  302. 圖片_pb.Image = My.Resources.PDF : 圖片_pb.SizeMode = 4 : If 圖片庫_tb.Text = "" Then : 圖片庫 = 圖片資料庫指定 : Else : 圖片庫 = 圖片庫_tb.Text : End If
  303. PA1 = 單號_tb.Text : PA2 = 圖片清單_dgv.Rows(DGVX).Cells("Item").Value : SQL_連線字串_圖片資料庫()
  304. Dim Str As String = System.Windows.Forms.Application.StartupPath : Dim ds1 As New DataSet : ds1.Clear() : SQL_文件圖片讀取1() : da.Fill(ds1)
  305. If ds1.Tables(0).Rows.Count > 0 Then
  306. Dim imgData() As Byte : imgData = ds1.Tables(0).Rows(0).Item("圖片")
  307. Dim fs As FileStream : fs = File.Create(Str + "\" & PA2 & ".pdf", imgData.Length - 1)
  308. fs.Write(imgData, 0, imgData.Length - 1) : fs.Close()
  309. End If : conn.Close() : PDF路徑 = Str + "\" & PA2 & ".pdf" : Me.RadPdfViewer1.LoadDocument(PDF路徑)
  310. End If
  311. End Sub
  312. Private Sub 讀取資料夾路徑_rbt_Click(sender As Object, e As EventArgs) Handles 讀取資料夾路徑_rbt.Click
  313. If OpenFileDialog1.ShowDialog <> DialogResult.Cancel Then
  314. If OpenFileDialog1.FileNames.Length > 6 Then : MsgBox("選取檔案不能超過6個!!") : Else
  315. For i As Integer = 0 To 5 : WW(i) = "" : WA(i) = "" : Dim 選擇 As PictureBox = CType(Me.Controls.Find("PB" & i + 1, True)(0), PictureBox) : 選擇.Image = Nothing : Next
  316. NU1 = OpenFileDialog1.FileNames.Length - 1
  317. For i As Integer = 0 To OpenFileDialog1.FileNames.Length - 1 : WW(i) = OpenFileDialog1.FileNames(i) : Next
  318. For i As Integer = 0 To NU1
  319. Dim 驗證 As String = "" : Dim 取變數 As String : 取變數 = Strings.StrReverse(WW(i))
  320. For ii As Integer = 1 To 10
  321. If ii = 1 Then : 驗證 = Strings.Left(取變數, ii) : Else
  322. If Strings.Mid(取變數, ii, 1) = "." Then : 驗證 = Strings.StrReverse(驗證) : Exit For : Else : 驗證 &= Strings.Mid(取變數, ii, 1) : End If
  323. End If
  324. Next
  325. If 驗證 = "PNG" Or 驗證 = "png" Or 驗證 = "GIF" Or 驗證 = "gif" Or 驗證 = "BMP" Or 驗證 = "bmp" Or 驗證 = "JPG" Or 驗證 = "jpg" Or
  326. 驗證 = "JPEG" Or 驗證 = "jpeg" Then : WA(i) = "JPG"
  327. Dim 選擇 As PictureBox = CType(Me.Controls.Find("PB" & i + 1, True)(0), PictureBox) : 選擇.Image = Image.FromFile(WW(i)) : 選擇.SizeMode = 4
  328. ElseIf 驗證 = "PDF" Or 驗證 = "pdf" Then : WA(i) = "PDF"
  329. Dim 選擇 As PictureBox = CType(Me.Controls.Find("PB" & i + 1, True)(0), PictureBox) : 選擇.Image = My.Resources.PDF : 選擇.SizeMode = 4
  330. Else : WW(i) = "" : WA(i) = "" : End If
  331. Next
  332. End If
  333. End If
  334. End Sub
  335. Private Sub 查詢_tb_MouseEnter(sender As Object, e As EventArgs) Handles 查詢_tb.MouseEnter
  336. ToolTip1.SetToolTip(Me.查詢_tb, "關鍵字搜尋")
  337. End Sub
  338. Private Sub 新增_bt_MouseEnter(sender As Object, e As EventArgs) Handles 新增_bt.MouseEnter
  339. ToolTip1.SetToolTip(Me.新增_bt, "新增")
  340. End Sub
  341. Private Sub 確認新增_bt_MouseEnter(sender As Object, e As EventArgs) Handles 儲存_bt.MouseEnter
  342. ToolTip1.SetToolTip(Me.儲存_bt, "儲存")
  343. End Sub
  344. Private Sub 發行_bt_MouseEnter(sender As Object, e As EventArgs) Handles 發行_bt.MouseEnter
  345. ToolTip1.SetToolTip(Me.發行_bt, "發行")
  346. End Sub
  347. Private Sub 修改_bt_MouseEnter(sender As Object, e As EventArgs) Handles 作廢_bt.MouseEnter
  348. ToolTip1.SetToolTip(Me.作廢_bt, "作廢")
  349. End Sub
  350. Private Sub 刪除_bt_MouseEnter(sender As Object, e As EventArgs) Handles 刪除_bt.MouseEnter
  351. ToolTip1.SetToolTip(Me.刪除_bt, "刪除")
  352. End Sub
  353. Private Sub 匯出EXCEL_bt_MouseEnter(sender As Object, e As EventArgs) Handles 列印_bt.MouseEnter
  354. ToolTip1.SetToolTip(Me.列印_bt, "匯出PDF")
  355. End Sub
  356. Private Sub 讀取資料夾路徑_rbt_MouseEnter(sender As Object, e As EventArgs) Handles 讀取資料夾路徑_rbt.MouseEnter
  357. ToolTip1.SetToolTip(Me.讀取資料夾路徑_rbt, "選擇電腦的資料夾路徑")
  358. End Sub
  359. Private Sub 圖檔入系統_rbt_MouseEnter(sender As Object, e As EventArgs) Handles 圖檔入系統_rbt.MouseEnter
  360. ToolTip1.SetToolTip(Me.圖檔入系統_rbt, "檔案存入系統")
  361. End Sub
  362. Private Sub 字體_NUD_ValueChanged(sender As Object, e As EventArgs) Handles 字體_NUD.ValueChanged
  363. 主旨_tb.Font = New System.Drawing.Font("微軟正黑體", 字體_NUD.Value)
  364. 說明_tb.Font = New System.Drawing.Font("微軟正黑體", 字體_NUD.Value)
  365. End Sub
  366. Private Sub 列印_bt_Click(sender As Object, e As EventArgs) Handles 列印_bt.Click
  367. If 檔案名稱_tb.Text = "" Then
  368. MsgBox("檔案名稱不可空白!!!")
  369. Exit Sub
  370. End If
  371. Set_清單1()
  372. xlApp = CType(CreateObject("Excel.Application"), Microsoft.Office.Interop.Excel.Application) : xlApp.Visible = True : xlApp.DisplayAlerts = True
  373. xlApp.Application.WindowState = xlMaximized : xlBook = xlApp.Workbooks.Add : xlSheet = NewMethod(xlBook) : xlBook.Activate() : xlSheet.Activate()
  374. xlSheet.Cells(1, 1) = "黃柏翰皮膚科診所"
  375. xlSheet.Cells(2, 1) = 主旨_tb.Text
  376. Dim largeText As String = 說明_tb.Text
  377. ' 使用正则表达式去除多余的换行符
  378. Dim cleanedText As String = Regex.Replace(largeText, "(\r\n|\r|\n)+", vbCrLf)
  379. ' 现在根据换行符拆分文本
  380. Dim lines() As String = cleanedText.Split(New String() {vbCrLf}, StringSplitOptions.None)
  381. For i As Integer = 0 To lines.Count - 1
  382. 字串處理(lines(i))
  383. lines(i) = 已處理字串
  384. Next
  385. For i = 0 To Lines.Count - 1
  386. xlSheet.Cells(3 + i, 1) = lines(i)
  387. N2 = i + 3
  388. Next
  389. BB(xlApp, xlSheet)
  390. xlApp.Sheets(2).Delete : xlSheet.PageSetup.PrintArea = ""
  391. Dim pdfFolderPath As String = Path.Combine(System.Windows.Forms.Application.StartupPath, "pdf")
  392. If Not Directory.Exists(pdfFolderPath) Then
  393. Directory.CreateDirectory(pdfFolderPath)
  394. End If
  395. Dim pdfFilePath As String = Path.Combine(pdfFolderPath, 檔案名稱_tb.Text & ".pdf")
  396. xlBook.Sheets(1).ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, pdfFilePath, XlFixedFormatQuality.xlQualityStandard, True)
  397. xlApp.Cells.Select() : xlApp.Application.WindowState = xlMinimized : xlBook.Close(False)
  398. Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)
  399. Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
  400. Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
  401. xlApp.Quit() : xlSheet = Nothing : xlBook = Nothing : xlApp = Nothing : GC.Collect()
  402. Try
  403. Dim chromePath As String = "C:\Program Files\Google\Chrome\Application\chrome.exe"
  404. If System.IO.File.Exists(chromePath) Then
  405. Dim process As New Process()
  406. process.StartInfo.FileName = "chrome"
  407. process.StartInfo.Arguments = """" & pdfFilePath & """"
  408. process.Start()
  409. Else : Dim edgePath As String = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
  410. If System.IO.File.Exists(edgePath) Then
  411. Dim process As New Process()
  412. process.StartInfo.FileName = "msedge"
  413. process.StartInfo.Arguments = """" & pdfFilePath & """"
  414. process.Start()
  415. Else
  416. Process.Start(pdfFilePath)
  417. End If
  418. End If
  419. Catch ex As Exception
  420. MsgBox("以存檔至桌面 。" & vbCrLf & "檔案名稱:" & 檔案名稱_tb.Text & ".pdf")
  421. End Try
  422. End Sub
  423. Public Sub 字串處理(ByVal 說明1 As String)
  424. Dim 前面空白數量 As Integer = 0
  425. While Strings.Right(說明1, 1) = " " : 說明1 = 說明1.Substring(0, 說明1.Length - 1) : End While
  426. While 說明1.StartsWith(" ") : 說明1 = 說明1.Substring(1) : 前面空白數量 += 1 : End While
  427. If 說明1.Contains(" ") Then
  428. Dim 空白數量() As String = 說明1.Split(" ") : Dim 中間空白數量 As Integer = 1
  429. For j As Integer = 0 To 空白數量.Length - 1 : If 空白數量(j) = "" Then : 中間空白數量 += 1 : End If : Next
  430. Dim 要去除的空白數量 As Integer = 中間空白數量 \ 2 : Dim 已去除的數量 As Integer = 0 : Dim 除2字串 As String = ""
  431. For i As Integer = 0 To 空白數量.Length - 1
  432. If 空白數量(i) = "" Then : If 已去除的數量 < 要去除的空白數量 Then : 已去除的數量 += 1 : Else : 除2字串 &= " " : End If : Else : 除2字串 &= 空白數量(i) : End If
  433. Next : 說明1 = 除2字串
  434. End If
  435. If 前面空白數量 > 0 Then : Dim 要增加的空白數量 As Integer = 前面空白數量 \ 2 : For i As Integer = 0 To 要增加的空白數量 - 1 : 說明1 = " " & 說明1 : Next : End If
  436. 已處理字串 = 說明1
  437. End Sub
  438. Private Shared Function NewMethod(xlBook As Microsoft.Office.Interop.Excel.Workbook) As Microsoft.Office.Interop.Excel.Worksheet
  439. Return CType(xlBook.Worksheets.Add, Microsoft.Office.Interop.Excel.Worksheet)
  440. End Function
  441. Private Sub BB(ByVal myExcel As Microsoft.Office.Interop.Excel.Application, ByVal xlSheet As Microsoft.Office.Interop.Excel.Worksheet)
  442. xlSheet.Activate() ' 激活工作表
  443. myExcel.ActiveWindow.View = XlWindowView.xlPageLayoutView
  444. myExcel.Application.PrintCommunication = False
  445. With myExcel.ActiveSheet.PageSetup
  446. .PrintTitleRows = ""
  447. .PrintTitleColumns = ""
  448. End With
  449. myExcel.Application.PrintCommunication = True
  450. myExcel.ActiveSheet.PageSetup.PrintArea = ""
  451. myExcel.Application.PrintCommunication = False
  452. With myExcel.ActiveSheet.PageSetup
  453. .LeftHeader = ""
  454. .CenterHeader = ""
  455. .RightHeader = ""
  456. .LeftFooter = ""
  457. .CenterFooter = ""
  458. .RightFooter = ""
  459. .LeftMargin = myExcel.Application.InchesToPoints(0.7)
  460. .RightMargin = myExcel.Application.InchesToPoints(0.7)
  461. .TopMargin = myExcel.Application.InchesToPoints(0.3)
  462. .BottomMargin = myExcel.Application.InchesToPoints(0.3)
  463. .HeaderMargin = myExcel.Application.InchesToPoints(0.3)
  464. .FooterMargin = myExcel.Application.InchesToPoints(0.3)
  465. .PrintHeadings = False
  466. .PrintGridlines = False
  467. .CenterHorizontally = True
  468. .CenterVertically = False
  469. .Draft = False
  470. .FirstPageNumber = xlAutomatic
  471. .BlackAndWhite = False
  472. .Zoom = False
  473. .FitToPagesWide = 0
  474. .FitToPagesTall = 0
  475. .OddAndEvenPagesHeaderFooter = False
  476. .DifferentFirstPageHeaderFooter = False
  477. .ScaleWithDocHeaderFooter = True
  478. .AlignMarginsHeaderFooter = True
  479. .EvenPage.LeftHeader.Text = ""
  480. .EvenPage.CenterHeader.Text = ""
  481. .EvenPage.RightHeader.Text = ""
  482. .EvenPage.LeftFooter.Text = ""
  483. .EvenPage.CenterFooter.Text = ""
  484. .EvenPage.RightFooter.Text = ""
  485. .FirstPage.LeftHeader.Text = ""
  486. .FirstPage.CenterHeader.Text = ""
  487. .FirstPage.RightHeader.Text = ""
  488. .FirstPage.LeftFooter.Text = ""
  489. .FirstPage.CenterFooter.Text = ""
  490. .FirstPage.RightFooter.Text = ""
  491. End With
  492. myExcel.Application.PrintCommunication = True
  493. xlSheet.Cells.Select()
  494. With myExcel.Selection.Font
  495. .Name = "微軟正黑體"
  496. .Size = 14
  497. .Strikethrough = False
  498. .Superscript = False
  499. .Subscript = False
  500. .OutlineFont = False
  501. .Shadow = False
  502. .Underline = xlUnderlineStyleNone
  503. .ThemeColor = xlThemeColorLight1
  504. .TintAndShade = 0
  505. .ThemeFont = xlThemeFontNone
  506. End With
  507. xlSheet.Columns("A:A").ColumnWidth = 80
  508. xlSheet.Columns("A:A").Select
  509. With myExcel.Selection
  510. .HorizontalAlignment = xlGeneral
  511. .VerticalAlignment = xlCenter
  512. .WrapText = True
  513. .Orientation = 0
  514. .AddIndent = False
  515. .IndentLevel = 0
  516. .ShrinkToFit = False
  517. .ReadingOrder = xlContext
  518. .MergeCells = False
  519. End With
  520. xlSheet.Range("A1").Select()
  521. With myExcel.Selection
  522. .HorizontalAlignment = xlCenter
  523. .VerticalAlignment = xlCenter
  524. .WrapText = True
  525. .Orientation = 0
  526. .AddIndent = False
  527. .IndentLevel = 0
  528. .ShrinkToFit = False
  529. .ReadingOrder = xlContext
  530. .MergeCells = False
  531. End With
  532. With myExcel.Selection.Font
  533. .Name = "微軟正黑體"
  534. .Size = 20
  535. .Strikethrough = False
  536. .Superscript = False
  537. .Subscript = False
  538. .OutlineFont = False
  539. .Shadow = False
  540. .Underline = xlUnderlineStyleNone
  541. .ThemeColor = xlThemeColorLight1
  542. .TintAndShade = 0
  543. .ThemeFont = xlThemeFontNone
  544. .Bold = True
  545. End With
  546. xlSheet.Range("A2").Select()
  547. With myExcel.Selection
  548. .HorizontalAlignment = xlCenter
  549. .VerticalAlignment = xlCenter
  550. .WrapText = True
  551. .Orientation = 0
  552. .AddIndent = False
  553. .IndentLevel = 0
  554. .ShrinkToFit = False
  555. .ReadingOrder = xlContext
  556. .MergeCells = False
  557. End With
  558. With myExcel.Selection.Font
  559. .Name = "微軟正黑體"
  560. .Size = 18
  561. .Strikethrough = False
  562. .Superscript = False
  563. .Subscript = False
  564. .OutlineFont = False
  565. .Shadow = False
  566. .Underline = xlUnderlineStyleNone
  567. .ThemeColor = xlThemeColorLight1
  568. .TintAndShade = 0
  569. .ThemeFont = xlThemeFontNone
  570. .Bold = True
  571. End With
  572. xlSheet.Rows("1:1").EntireRow.AutoFit
  573. xlSheet.Rows(1).RowHeight = xlSheet.Rows(1).RowHeight + 5
  574. xlSheet.Rows("2:2").EntireRow.AutoFit
  575. xlSheet.Rows(2).RowHeight = xlSheet.Rows(1).RowHeight + 5
  576. For i = 3 To N2
  577. xlSheet.Rows(i & ":" & i).Select
  578. xlSheet.Rows(i & ":" & i).EntireRow.AutoFit
  579. If xlSheet.Rows(i).RowHeight + 5 > 409 Then
  580. xlSheet.Rows(i).RowHeight = 409
  581. Else
  582. xlSheet.Rows(i).RowHeight = xlSheet.Rows(i).RowHeight + 5
  583. End If
  584. Next
  585. End Sub
  586. End Class