-
Đọc và Ghi ra QRcode bằng VBA
lehongduc > 04-10-17, 06:48 PM
Chào các Bạn,
Để đọc và ghi ra QRcode ta có thể nhờ vào các dịch vụ trực tuyến trên internet, song cách này có hạn chế là bắt buộc phải kết nối online với Internet mới được.
Có cách khác, không cần kết nối internet online. Các Bạn có thể dùng thư viện ZXing, là dự án mã nguồn mở, link nguồn ở đây: https://zxingnet.codeplex.com/
Với phiên bản ZXing.Net 0.16.0.0 đã có sẵn thư viện DLL của ZXing sẵn sàng cho chúng ta biên dịch file DLL này thành file TLB để chúng ta sử dụng được trong VBA.
Xin đính kèm theo đây file thư viện đã được tôi biên dịch và code VBA mẫu dựa trên hướng dẫn của ZXing.
Chú ý: Muốn sử dụng được thư viện này trong VBA, các Bạn phải:
1. Biên dịch file zxing.dll thành zxing.tlb bằng tiện ích "regasm.exe". Hoặc sử dụng file zxing.tlb tôi đã biên dich sẵn trong file tải xuống từ link sau:
https://www.mediafire.com/file/9lqcuhc1o...102017.zip
2. Khai báo References trong cửa sổ VBA Editor như ảnh sau:
3. Code VBA tôi đã có sửa lại cho phù hợp và dễ hiểu:
+ Trong khung code bên dưới, các function có tên với từ "Decode" nghĩa là đọc mã QRCode (để cho ra nội dung là Text), "Encode" nghĩa là ghi nội dung Text thành mã QRCode.
Mã:Option Explicit
Function Decode_QR_Code_From_File(FileName As String, TextVal As String)
Dim reader As IBarcodeReader
Dim res As Result
Set reader = New BarcodeReader
reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE
'Set res = reader.DecodeImageFile("D:\Barcodes\QrCodes\www.png")
Set res = reader.DecodeImageFile(FileName)
TextVal = res.Text
End Function
Function Decode_QR_Code_From_Byte_Array()
Dim reader As IBarcodeReader
Dim rawRGB(1000) As Byte
Dim res As Result
Set reader = New BarcodeReader
reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE
Rem TODO: load bitmap data to byte array rawRGB
Set res = reader.DecodeImageBytes(rawRGB, 10, 10, BitmapFormat.BitmapFormat_Gray8)
End Function
Function Encode(YourText As String, ToFileName As String)
Dim writer As IBarcodeWriter
Dim qrCodeOptions As QrCodeEncodingOptions
Dim pixelDataResult As PixelData
Set qrCodeOptions = New QrCodeEncodingOptions
Set writer = New BarcodeWriter
writer.Format = BarcodeFormat_QR_CODE
Set writer.Options = qrCodeOptions
qrCodeOptions.Height = 100
qrCodeOptions.Width = 100
qrCodeOptions.CharacterSet = "UTF-8"
qrCodeOptions.Margin = 10
qrCodeOptions.ErrorCorrection = ErrorCorrectionLevel_H
'writer.WritePngToFile "Test", "D:\interop_qrcode.png"
writer.WritePngToFile YourText, ToFileName
Set pixelDataResult = writer.Write("Test")
End Function
Function Decode_QR_Code_From_File_CreateObject(FromFileName As String)
Dim reader As IBarcodeReader
Dim res As Result
Set reader = CreateObject("ZXing.Interop.Decoding.BarcodeReader")
reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE
'Set res = reader.DecodeImageFile("D:\Barcodes\QrCodes\www.png")
Set res = reader.DecodeImageFile(FromFileName)
End Function -
RE: Đọc và Ghi ra QRcode bằng VBA
ongke0711 > 04-10-17, 08:54 PM
Hay quá. Cái này ứng dụng trong nhân sự được nè - dùng tạo mã QR cho nhân viên. App quét QR code cũng nhiều hơn, dễ cài trên các thiết bị di động. -
RE: Đọc và Ghi ra QRcode bằng VBA
minhminh25767 > 07-10-17, 04:04 PM
Cái này hình như không dùng trong Access được phải không? ạ! Mình không thấy file Mdb -
RE: Đọc và Ghi ra QRcode bằng VBA
thanhtruong > 08-09-18, 09:10 AM
(04-10-17, 06:48 PM)lehongduc Đã viết: Chào các Bạn,
Để đọc và ghi ra QRcode ta có thể nhờ vào các dịch vụ trực tuyến trên internet, song cách này có hạn chế là bắt buộc phải kết nối online với Internet mới được.
Có cách khác, không cần kết nối internet online. Các Bạn có thể dùng thư viện ZXing, là dự án mã nguồn mở, link nguồn ở đây: https://zxingnet.codeplex.com/
Với phiên bản ZXing.Net 0.16.0.0 đã có sẵn thư viện DLL của ZXing sẵn sàng cho chúng ta biên dịch file DLL này thành file TLB để chúng ta sử dụng được trong VBA.
Xin đính kèm theo đây file thư viện đã được tôi biên dịch và code VBA mẫu dựa trên hướng dẫn của ZXing.
Chú ý: Muốn sử dụng được thư viện này trong VBA, các Bạn phải:
1. Biên dịch file zxing.dll thành zxing.tlb bằng tiện ích "regasm.exe". Hoặc sử dụng file zxing.tlb tôi đã biên dich sẵn trong file tải xuống từ link sau:
https://www.mediafire.com/file/9lqcuhc1o...102017.zip
2. Khai báo References trong cửa sổ VBA Editor như ảnh sau:
3. Code VBA tôi đã có sửa lại cho phù hợp và dễ hiểu:
+ Trong khung code bên dưới, các function có tên với từ "Decode" nghĩa là đọc mã QRCode (để cho ra nội dung là Text), "Encode" nghĩa là ghi nội dung Text thành mã QRCode.
Mã:Option Explicit
Function Decode_QR_Code_From_File(FileName As String, TextVal As String)
Dim reader As IBarcodeReader
Dim res As Result
Set reader = New BarcodeReader
reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE
'Set res = reader.DecodeImageFile("D:\Barcodes\QrCodes\www.png")
Set res = reader.DecodeImageFile(FileName)
TextVal = res.Text
End Function
Function Decode_QR_Code_From_Byte_Array()
Dim reader As IBarcodeReader
Dim rawRGB(1000) As Byte
Dim res As Result
Set reader = New BarcodeReader
reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE
Rem TODO: load bitmap data to byte array rawRGB
Set res = reader.DecodeImageBytes(rawRGB, 10, 10, BitmapFormat.BitmapFormat_Gray8)
End Function
Function Encode(YourText As String, ToFileName As String)
Dim writer As IBarcodeWriter
Dim qrCodeOptions As QrCodeEncodingOptions
Dim pixelDataResult As PixelData
Set qrCodeOptions = New QrCodeEncodingOptions
Set writer = New BarcodeWriter
writer.Format = BarcodeFormat_QR_CODE
Set writer.Options = qrCodeOptions
qrCodeOptions.Height = 100
qrCodeOptions.Width = 100
qrCodeOptions.CharacterSet = "UTF-8"
qrCodeOptions.Margin = 10
qrCodeOptions.ErrorCorrection = ErrorCorrectionLevel_H
'writer.WritePngToFile "Test", "D:\interop_qrcode.png"
writer.WritePngToFile YourText, ToFileName
Set pixelDataResult = writer.Write("Test")
End Function
Function Decode_QR_Code_From_File_CreateObject(FromFileName As String)
Dim reader As IBarcodeReader
Dim res As Result
Set reader = CreateObject("ZXing.Interop.Decoding.BarcodeReader")
reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE
'Set res = reader.DecodeImageFile("D:\Barcodes\QrCodes\www.png")
Set res = reader.DecodeImageFile(FromFileName)
End Function
Cái này làm sao áp dụng vào được vậy Anh. Anh có thể nói các bước để tạo ra được cái mã QR này không anh -
RE: Đọc và Ghi ra QRcode bằng VBA
minhminh25767 > 05-11-18, 11:59 AM
(04-10-17, 06:48 PM)lehongduc Đã viết: Chào các Bạn,
Cái này làm sao vậy Anh, nghĩa là bây giờ mình tải về rồi, và cài cái thư viên đó như thế nào ạ, rồi làm sao để tạo được nội dung thành Qr,
Để đọc và ghi ra QRcode ta có thể nhờ vào các dịch vụ trực tuyến trên internet, song cách này có hạn chế là bắt buộc phải kết nối online với Internet mới được.
Có cách khác, không cần kết nối internet online. Các Bạn có thể dùng thư viện ZXing, là dự án mã nguồn mở, link nguồn ở đây: https://zxingnet.codeplex.com/
Với phiên bản ZXing.Net 0.16.0.0 đã có sẵn thư viện DLL của ZXing sẵn sàng cho chúng ta biên dịch file DLL này thành file TLB để chúng ta sử dụng được trong VBA.
Xin đính kèm theo đây file thư viện đã được tôi biên dịch và code VBA mẫu dựa trên hướng dẫn của ZXing.
Chú ý: Muốn sử dụng được thư viện này trong VBA, các Bạn phải:
1. Biên dịch file zxing.dll thành zxing.tlb bằng tiện ích "regasm.exe". Hoặc sử dụng file zxing.tlb tôi đã biên dich sẵn trong file tải xuống từ link sau:
https://www.mediafire.com/file/9lqcuhc1o...102017.zip
2. Khai báo References trong cửa sổ VBA Editor như ảnh sau:
3. Code VBA tôi đã có sửa lại cho phù hợp và dễ hiểu:
+ Trong khung code bên dưới, các function có tên với từ "Decode" nghĩa là đọc mã QRCode (để cho ra nội dung là Text), "Encode" nghĩa là ghi nội dung Text thành mã QRCode.
Mã:Option Explicit
Function Decode_QR_Code_From_File(FileName As String, TextVal As String)
Dim reader As IBarcodeReader
Dim res As Result
Set reader = New BarcodeReader
reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE
'Set res = reader.DecodeImageFile("D:\Barcodes\QrCodes\www.png")
Set res = reader.DecodeImageFile(FileName)
TextVal = res.Text
End Function
Function Decode_QR_Code_From_Byte_Array()
Dim reader As IBarcodeReader
Dim rawRGB(1000) As Byte
Dim res As Result
Set reader = New BarcodeReader
reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE
Rem TODO: load bitmap data to byte array rawRGB
Set res = reader.DecodeImageBytes(rawRGB, 10, 10, BitmapFormat.BitmapFormat_Gray8)
End Function
Function Encode(YourText As String, ToFileName As String)
Dim writer As IBarcodeWriter
Dim qrCodeOptions As QrCodeEncodingOptions
Dim pixelDataResult As PixelData
Set qrCodeOptions = New QrCodeEncodingOptions
Set writer = New BarcodeWriter
writer.Format = BarcodeFormat_QR_CODE
Set writer.Options = qrCodeOptions
qrCodeOptions.Height = 100
qrCodeOptions.Width = 100
qrCodeOptions.CharacterSet = "UTF-8"
qrCodeOptions.Margin = 10
qrCodeOptions.ErrorCorrection = ErrorCorrectionLevel_H
'writer.WritePngToFile "Test", "D:\interop_qrcode.png"
writer.WritePngToFile YourText, ToFileName
Set pixelDataResult = writer.Write("Test")
End Function
Function Decode_QR_Code_From_File_CreateObject(FromFileName As String)
Dim reader As IBarcodeReader
Dim res As Result
Set reader = CreateObject("ZXing.Interop.Decoding.BarcodeReader")
reader.Options.PossibleFormats.Add BarcodeFormat_QR_CODE
'Set res = reader.DecodeImageFile("D:\Barcodes\QrCodes\www.png")
Set res = reader.DecodeImageFile(FromFileName)
End Function
Mong anh hồi đáp -
RE: Đọc và Ghi ra QRcode bằng VBA
lehongduc > 05-11-18, 08:54 PM
Chào các Bạn,
Như tôi đã trình bày rõ trong bài, các Bạn chỉ cần làm những việc sau đây là có thể tạo và đọc được QRCode trong Access rồi:
1. Biên dịch file nguồn ra thư viện tlb
Bạn nào không muốn tự làm thì tôi cũng đã làm giúp như trong bài tôi đã nêu. Nếu vậy thì các Bạn chỉ cần sử dụng nữa thôi.
2. Cho đăng ký thư viện này vào hệ thống các thư viện trong ứng dụng Access của các Bạn. Các Bạn xem ảnh chụp màn hình cửa sổ có tiêu đề Preferences - VBA Project
3. Copy nội dung các Procedure tôi đã đăng ở bài trước vào 1 module nào đó rồi sử dụng thôi.
Về tác dụng của các Procedure này đã thể hiện rõ ràng qua tên của nó rồi. Tôi xin nêu cụ thể như sau:
Function Decode_QR_Code_From_File(FileName As String, TextVal As String)
Function này dùng để lấy ra nội dung từ 1 file ảnh QRCode. Các tham số như sau:
+ FileName: tên và đường dẫn của của file ảnh QRCode
+ TextVal: biến chứa nội dung text được đọc ra từ file ảnh
Function Encode(YourText As String, ToFileName As String)
Function này dùng để ghi nội dung text thành file ảnh QRCode. Có các tham số như sau:
+ YourText: nội dung text mà Bạn muốn chuyển thành QRCode
+ ToFileName: tên và đường dẫn file ảnh QRCode (chứa nội dung YourText)
Tất cả đã sẵn sàng rồi. Các Bạn chỉ cần thiết kế Form, trên đó có:
+ Chỗ để chỉ rõ nội dung Text (lấy ra từ QRCode, hay đưa vào thành QRCode)
+ TextBox để nhập vào tên file ảnh QRCode
+ Nút lệnh để lấy nội dung Text ra từ QRCode
+ Nút lệnh để chuyển nội dung chỉ định thành QRCode. -
RE: Đọc và Ghi ra QRcode bằng VBA
lehongduc > 05-11-18, 09:15 PM
Chào các Bạn,
Một số Bạn hỏi có áp dụng được thư viện này vào ứng dụng thực tế hay không?
Cách tốt nhất để chứng minh điều đó là tôi mời các Bạn tham khảo ứng dụng của tôi đang bán ra cho người sử dụng.
Mời các Bạn tham khảo ứng dụng thực tế tại địa chỉ sau: http://quantribanhang.vn/forum và tìm với từ khóa "QRcode" để đọc tài liệu hướng dẫn chi tiết có liên quan.
P/S: Nếu nội dung này vi phạm quy định của diễn đàn này vì đã có nội dung quảng cáo, xin admin cứ tự nhiên xóa. Tôi rất vui lòng tuân thủ quy định chung. -
RE: Đọc và Ghi ra QRcode bằng VBA
mrsiro > 06-11-18, 07:21 PM
Anh lehongduc cho em hỏi, function ở trên muốn đọc QR code phải có file ảnh của QRcode đó trên máy tính, vậy nếu dùng cách kết nối trực tiếp với các thiết bị quét QRcode thì như thế nào. Tức là không cần phải có file ảnh QRcode nữa mà chỉ cần kết nối các thiết bị quét QRcode là nhận về nội dung trên textbox luôn. -
RE: Đọc và Ghi ra QRcode bằng VBA
lehongduc > 07-11-18, 08:02 AM
(06-11-18, 07:21 PM)mrsiro Đã viết: Anh lehongduc cho em hỏi, function ở trên muốn đọc QR code phải có file ảnh của QRcode đó trên máy tính, vậy nếu dùng cách kết nối trực tiếp với các thiết bị quét QRcode thì như thế nào. Tức là không cần phải có file ảnh QRcode nữa mà chỉ cần kết nối các thiết bị quét QRcode là nhận về nội dung trên textbox luôn.
Chào Bạn,
Hiện nay tất cả các thiết bị quét Barcode hoặc QRCode đều được Windows nhận tự động, do vậy Bạn chỉ cần dùng thiết bị quét để quét mã Barcode hoặc QRCode vào thì nội dung của nó sẽ được đưa ra ngay lập tức tại vị trí của con trỏ (tất nhiên, nội dung đó là dạng Text)
Thêm thông tin tham khảo: Bạn có thể sử dụng SmartPhone kết nối với máy tính để làm thiết bị quét mã Barcode / QRCode vào máy tính. Xin mời tham khảo thông tin tại link sau:
http://quantribanhang.vn/forum/viewtopic...=52&t=1700