- [VB.NET] Chia sẻ source code lịch âm dương và hẹn lịch nhắc việc
- [C#] Hướng dẫn đọc thông số thiết bị Thiết bị kiểm tra Pin (HIOKI BATTERY HiTESTER BT3562)
- [VB.NET] Hướng dẫn giải captcha sử dụng dịch vụ AZCaptcha API trên winform
- [C#] Hướng dẫn chứng thực đăng nhập ứng dụng bằng vân tay (Finger Print) trên máy tính
- [C#] Color Thief cách xuất màu sắc thiết kế từ hình ảnh
- [C#] Cách tạo bản quyền và cho phép dùng thử ứng dụng Winform
- [C#] Hướng dẫn sử dụng trình duyệt web Chrome convert HTML sang tập tin file PDF
- [C#] Kết nôi điện thoại Android, IOS với App Winform via Bluetooth
- [DATABASE] Cách query cộng trừ dồn dần trong Sqlserver
- [C#] Thiết kế ứng dụng Console đẹp với thư viện Spectre.Console
- [C#] Thiết kế ứng dụng Single Instance và đưa ứng dụng lên trước nếu kiểm tra ứng dụng đang chạy
- [C#] Giới thiệu JSON Web Token và cách đọc chuỗi token
- [C#] Cách tăng giảm font chữ tất cả các control trên winform
- [DEVEXPRESS] Tích hợp chức năng Tìm kiếm Search vào CheckedComboboxEdit
- [C#] Gởi email Metting Calendar Reminder kèm nhắc thời gian lịch họp
- [C#] Tìm kiếm xem danh sách từ khóa có tồn tại trong đoạn văn bản hay không
- [C#] Thiết kế giao diện ứng dụng trên Console sử dụng thư viện Terminal.Gui
- [C#] Hướng dẫn tạo mã VietQR Payment API Winform
- [C#] Sử dụng thư viện BenchmarkDotNet đo hiệu năng của hảm Method
- [DEVEXPRESS] Tìm kiếm không dấu tô màu highlight có dấu trên C# Winform
Hướng dẫn tạo Mail Merge trong VB.NET
Hôm nay, mình xin hướng dẫn các bạn cách tạo Mail Merge trong VB.NET, vậy mail merge là gì?
Mail Merge là chức năng soạn thư hàng loạt trong Microsoft Word, được nhiều người gọi bằng thuật ngữ trộn thư.
Với Mail Merge, bạn có thể tạo cùng lúc nhiều thư với cùng nội dung nhưng khác nhau ở một vài thông tin.
Ví dụ: Mình có một mẫu đơn thông tin nhân viên giống nhau cùng form, nếu mình muốn in ra nhiều lần.
Ex: mẫu form nhân viên
Mình có thể sử dụng report để thiết kế, nhưng nếu sử dụng report để thiết kế theo mẫu sẵn có, thì tính người dùng cuối sẽ không cao.
Như mình muốn in bảng lương của nhân viên, nhưng sau này công ty đổi mẫu khác, không lẽ mình phải đi thiết kế report lại. Nếu dùng Mail Merge trong Word, mình chỉ cần chỉnh sửa nội dung trong file Word là xong. Tính khả thi nó cao phải không các bạn.
Để có thể sử dụng Mail Merge trong VB.Net hay C#, đầu tiên các bạn cần phải tạo 1 file word có chứa sẵn nội dung chung. Như hình bên dưới
Trong bài viết này mình sử dụng thư viện Spire để sử dụng Mail Merge.
Các bạn , chỉ cần load dữ liệu từ cơ sở dữ liệu vào datatable và sau đó sử dụng hàm có sẵn trong thư viện để chạy Mail Merge.
Video Demo ứng dụng:
Giờ mình bắt đầu code ứng dụng:
- Đầu tiên mình cần import thư viện vào
Imports System.Data.SqlClient
Imports Spire.Doc
Imports Spire.Doc.Documents
Imports Spire.Doc.Fields
Imports Spire.Doc.Interface
Imports Spire.Doc.Reporting
- Dưới đây là nguyên đoạn code của form
Public Class Form1
Dim con As New SqlConnection
Public lastIndex As Integer = 0
Private WithEvents mailMerge As Spire.Doc.Reporting.MailMerge
Public Sub Taoketnoi()
Dim str As String = "Data Source=.;Initial Catalog=NORTHWND;Integrated Security=True"
con.ConnectionString = str
con.Open()
End Sub
Public Sub Dongketnoi()
con.Close()
End Sub
Public Function LayDulieu(sql As String) As DataTable
Taoketnoi()
Dim dt As New DataTable
Dim da As New SqlDataAdapter
da.SelectCommand = New SqlCommand(sql, con)
da.Fill(dt)
Dongketnoi()
Return dt
End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim ds As DataTable = LayDulieu("select EmployeeID, (FirstName + ' ' + LastName) as FullName from Employees")
'MessageBox.Show(ds.Tables(0).Rows(0)(2))
ComboBox1.DataSource = ds
ComboBox1.DisplayMember = "FullName"
ComboBox1.ValueMember = "EmployeeID"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ID As String
ID = ComboBox1.SelectedValue
Dim dt As DataTable = LayDulieu("SELECT EmployeeID, FirstName, LastName, BirthDate, HireDate, Address, HomePhone, Notes, PhotoPath from Employees where EmployeeID='" & ID & "'")
'Tạo file word
Dim document_Renamed As New Document()
Dim str As String = Application.StartupPath + "Employee.doc"
document_Renamed.LoadFromFile(str)
Dim EmployeeID As String = dt.Rows(0)(0)
Dim FirstName As String = dt.Rows(0)(1)
Dim LastName As String = dt.Rows(0)(2)
Dim BirthDate As String = dt.Rows(0)(3)
Dim HireDate As String = dt.Rows(0)(4)
Dim Address As String = dt.Rows(0)(5)
Dim HomePhone As String = dt.Rows(0)(6)
Dim Notes As String = dt.Rows(0)(7)
Dim PhotoPath As String = dt.Rows(0)(8)
Dim filedNames() As String = {"EmployeeID", "FirstName", "LastName", "BirthDate", "HireDate", "Address", "HomePhone", "Notes", "PhotoPath"}
Dim filedValues() As String = {EmployeeID, FirstName, LastName, BirthDate, HireDate, Address, HomePhone, Notes, PhotoPath}
document_Renamed.MailMerge.Execute(filedNames, filedValues)
'Lưu file
document_Renamed.SaveToFile("example.doc", FileFormat.Doc)
'Mở file mới tạo xong
WordDocViewer("example.doc")
End Sub
Private Sub WordDocViewer(ByVal fileName As String)
Try
Process.Start(fileName)
Catch
End Try
End Sub
Private Sub MailMerge_MergeField(ByVal sender As Object, ByVal args As MergeFieldEventArgs) Handles mailMerge.MergeField
'Next row
If args.RowIndex > lastIndex Then
lastIndex = args.RowIndex
AddPageBreakForMergeField(args.CurrentMergeField)
End If
End Sub
Private Sub AddPageBreakForMergeField(ByVal mergeField As IMergeField)
'Find position of needing to add page break
Dim foundGroupStart As Boolean = False
Dim paramgraph As Paragraph = TryCast(mergeField.PreviousSibling.Owner, Paragraph)
Dim merageField As MergeField = Nothing
While Not foundGroupStart
paramgraph = TryCast(paramgraph.PreviousSibling, Paragraph)
For i As Integer = 0 To paramgraph.Items.Count - 1
merageField = TryCast(paramgraph.Items(i), MergeField)
If (merageField IsNot Nothing) AndAlso (merageField.Prefix = "GroupStart") Then
foundGroupStart = True
Exit For
End If
Next
End While
paramgraph.AppendBreak(BreakType.PageBreak)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim document_Renamed As New Document()
Dim str As String = Application.StartupPath + "grpEmployee.doc"
document_Renamed.LoadFromFile(str)
lastIndex = 0
Dim dt As DataTable = LayDulieu("SELECT EmployeeID, FirstName, LastName, BirthDate, HireDate, Address, HomePhone, Notes, PhotoPath from Employees")
Dim employeeRecords As New List(Of Employees)()
For i As Integer = 0 To dt.Rows.Count - 1
Dim a As New Employees
a.EmployeeID = dt.Rows(i)(0)
a.FirstName = dt.Rows(i)(1)
a.LastName = dt.Rows(i)(2)
a.BirthDate = dt.Rows(i)(3)
a.HireDate = dt.Rows(i)(4)
a.Address = dt.Rows(i)(5)
a.HomePhone = dt.Rows(i)(6)
a.Notes = dt.Rows(i)(7)
a.PhotoPath = dt.Rows(i)(8)
employeeRecords.Add(a)
Next
'Execute mailmerge
mailMerge = document_Renamed.MailMerge
document_Renamed.MailMerge.ExecuteGroup(New MailMergeDataTable("Employee", employeeRecords))
'Save doc file.
document_Renamed.SaveToFile("group.doc", FileFormat.Doc)
'Launching the MS Word file.
WordDocViewer("group.doc")
End Sub
End Class
Public Class Employees
Private m_EmployeeID As Integer
Public Property EmployeeID() As Integer
Get
Return m_EmployeeID
End Get
Set(ByVal value As Integer)
m_EmployeeID = value
End Set
End Property
Private m_FirstName As String
Public Property FirstName() As String
Get
Return m_FirstName
End Get
Set(ByVal value As String)
m_FirstName = value
End Set
End Property
Private m_LastName As String
Public Property LastName() As String
Get
Return m_LastName
End Get
Set(ByVal value As String)
m_LastName = value
End Set
End Property
Private m_BirthDate As String
Public Property BirthDate() As String
Get
Return m_BirthDate
End Get
Set(ByVal value As String)
m_BirthDate = value
End Set
End Property
Private m_HireDate As String
Public Property HireDate() As String
Get
Return m_HireDate
End Get
Set(ByVal value As String)
m_HireDate = value
End Set
End Property
Private m_Address As String
Public Property Address() As String
Get
Return m_Address
End Get
Set(ByVal value As String)
m_Address = value
End Set
End Property
Private m_HomePhone As String
Public Property HomePhone() As String
Get
Return m_HomePhone
End Get
Set(ByVal value As String)
m_HomePhone = value
End Set
End Property
Private m_Notes As String
Public Property Notes() As String
Get
Return m_Notes
End Get
Set(ByVal value As String)
m_Notes = value
End Set
End Property
Private m_PhotoPath As String
Public Property PhotoPath() As String
Get
Return m_PhotoPath
End Get
Set(ByVal value As String)
m_PhotoPath = value
End Set
End Property
End Class
Chúc các bạn thành công. Mọi câu hỏi thắc mắc đến bài viết xin truy cập http://hoidap.laptrinhvb.net để được support.
ĐỪNG QUÊN LIKE AND SHARE NHA CÁC BẠN.
CÁM ƠN CÁC BẠN ĐÃ THEO DÕI.