lehongduc > 04-10-17, 06:48 PM
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
ongke0711 > 04-10-17, 08:54 PM
minhminh25767 > 07-10-17, 04:04 PM
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
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
lehongduc > 05-11-18, 08:54 PM
lehongduc > 05-11-18, 09:15 PM
mrsiro > 06-11-18, 07:21 PM
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,