NEWS

[C#] Hướng dẫn cách tạo mã QR Code trên file Excel

[C#] Hướng dẫn cách tạo mã QR Code trên file Excel
Đăng bởi: Thảo Meo - Lượt xem: 3043 14:31:19, 29/12/2023DEVEXPRESS   In bài viết

Xin chào các bạn, bài viết hôm nay mình chia sẻ các bạn source code các tạo mã QRCode trên File Excel bằng C#, Winform.

[C#] Export QRcode to Excel Winform

Trong bài này, mình sử dụng thư viện: 

  1. Zxing để tạo mã qrcode 
  2. CloseXML để thao tác làm việc với file excel.

Ví dụ: Chúng ta có 1 file excel danh sách nhân viên như hình bên dưới đây

qrcode_csharp_nv

Và công việc là bây giờ mình xuất tạo mã QRCode theo Mã SV vào ô QRCode.

Kết quả khi chạy chúng ta được hình bên dưới.

qrcode_excel_export

Source code c#:

using ClosedXML.Excel;
using DocumentFormat.OpenXml.Drawing;
using DocumentFormat.OpenXml.Spreadsheet;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZXing;
using static System.Net.Mime.MediaTypeNames;

namespace ConsoleApp8
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var sheetName = "Sheet1";
            var qrCodeValueAtCell = "E";
            var imageQRcodeCell = "F";
            var vitriBatdauDoc = 8; // BẮT ĐẦU GHI TỪ Ô SỐ 8

            string filePath = "template.xlsx";        
            DataTable dataTable = ReadColumnDataFromExcel(filePath, sheetName, qrCodeValueAtCell, vitriBatdauDoc);
            PrintDataTable(dataTable);
            Console.ReadLine();
            using (var workbook = new XLWorkbook(filePath))
            {
                var worksheet = workbook.Worksheet(sheetName);
                var k = vitriBatdauDoc -1;
                foreach (DataRow item in dataTable.Rows)
                {
                    k++;
                    var qrCodeContent = item["qr"].ToString();
                    var qrCodeBitmap = GenerateQRCodeBitmap(qrCodeContent);
                    var ms = new MemoryStream();
                    qrCodeBitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                    worksheet.Row(k).Height = 88;
                  
                    var offset = worksheet.Cell($"{imageQRcodeCell}{k}");
                    worksheet.AddPicture(ms).MoveTo(offset, 5, 10).WithSize(95, 95);
                }
                workbook.SaveAs("output.xlsx");
            }

            Process.Start("output.xlsx");
        }

        static Bitmap GenerateQRCodeBitmap(string content)
        {
            var barcodeWriter = new BarcodeWriter();
            barcodeWriter.Format = BarcodeFormat.QR_CODE;
            barcodeWriter.Options = new ZXing.Common.EncodingOptions
            {
                Width = 100,
                Height = 100,
                Margin = 0,
               
                NoPadding = true
            };

            return barcodeWriter.Write(content);
        }
        static int ColumnLetterToIndex(string columnName)
        {
            int index = 0;
            int length = columnName.Length;

            for (int i = 0; i < length; i++)
            {
                char letter = columnName[i];
                index = index * 26 + (letter - 'A' + 1);
            }

            return index;
        }

        static DataTable ReadColumnDataFromExcel(string filePath, string sheetName, string columnName, int start)
        {
            DataTable dataTable = new DataTable();
            dataTable.Columns.Add(new DataColumn("qr"));
            start = start - 1;
            using (var workbook = new XLWorkbook(filePath))
            {
                var worksheet = workbook.Worksheet(sheetName);

              
                int columnIndex = ColumnLetterToIndex(columnName);

                var firstRow = worksheet.FirstRowUsed();
                var lastRow = worksheet.LastRowUsed();

                var rowsInRange = worksheet.Rows(1, lastRow.RowNumber());
                int i = -1;
                foreach (var row in rowsInRange)
                {
                    i++;
                    if (i < start) continue;                  

                    if (!row.Cell(columnIndex).IsEmpty())
                    {
                        var cellValue = row.Cell(columnIndex).Value.ToString();
                        dataTable.Rows.Add(cellValue);
                    }
                    
                }
            }

            return dataTable;
        }
        static void PrintDataTable(DataTable dataTable)
        {
            foreach (DataRow row in dataTable.Rows)
            {
                Console.WriteLine(row[0]); 
            }
        }
    }
}

Ở source code này các bạn cần chỉnh các thông số sau phù hợp với nhu cầu xuất qrcode của mình.

var sheetName = "Sheet1";
var qrCodeValueAtCell = "E";
var imageQRcodeCell = "F";
var vitriBatdauDoc = 8; // BẮT ĐẦU GHI TỪ Ô SỐ 8

VD: sheet tên gì gì, mã dữ liệu đầu vào của QR code, vẽ hình qrcode vào vị trí nào.

Video demo export qrcode excel c#:

Thanks for watching!

 

DOWNLOAD SOURCE

 

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

[C#] Hướng dẫn cách tạo mã QR Code trên file Excel
Đăng bởi: Thảo Meo - Lượt xem: 3043 14:31:19, 29/12/2023DEVEXPRESS   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.