- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
[C#] Hướng dẫn xuất dữ liệu từ data ra file Excel template sử dụng Epplus
Xin chào các bạn, bài viết hôm nay mình sẻ hướng dẫn các bạn cách xuất dữ liệu từ Data ra file Excel mẫu Template sử dụng thư viện Epplus C# Winform.
[C#] Export Data to Excel Template using Epplus Winform
Dưới đây, mình có một mẫu hóa đơn bán lẽ như hình bên dưới:
Ở hình trên các bạn thấy, tên Filed mình đang bao bọc bởi cặp dấu "{}", các bạn có thể thay đổi cặp dấu này thành %, #, $ hay ký hiệu gì tùy bạn nhé.
Lúc gọi hàm ở FillReport, các bạn truyền thêm ký tự này vào trong hàm.
Ở hình demo xuất dữ liệu ra hóa đơn trên mình: Sử dụng 2 datatable.
- Table "info"
- Table "productDetails"
Ở table Info là từng dòng đơn nên mình ghi ký hiệu tên {info.tencuahang}
Còn ở phần danh sách list sản phẩm sách tin học, các bạn khai báo Define Name trong excel hình hình mình bên dưới.
P/s: các bạn nhớ đặt tên Define Name giống tên Table mình khai báo ở trong code nhé.
Và Dưới đây là kết quả khi chúng ta chạy ứng dụng đổ dữ liệu vào Excel Template C#
Video demo ứng dụng:
Đầu tiên, các bạn tạo cho mình một class: TemplateExcel.cs
using OfficeOpenXml;
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using OfficeOpenXml.Table;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ExportExcelToTemplateEpplus
{
public class TemplateExcel
{
public static void FillReport(string filename, string templatefilename, DataSet data)
{
FillReport(filename, templatefilename, data, new string[] { "%", "%" });
}
public static void FillReport(string filename, string templatefilename, DataSet data, string[] deliminator)
{
if (File.Exists(filename))
File.Delete(filename);
using (var file = new FileStream(filename, FileMode.CreateNew))
{
using (var temp = new FileStream(templatefilename, FileMode.Open))
{
using (var xls = new ExcelPackage(file, temp))
{
foreach (var n in xls.Workbook.Names)
{
FillWorksheetData(data, n.Worksheet, n, deliminator);
}
foreach (var ws in xls.Workbook.Worksheets)
{
foreach (var n in ws.Names)
{
FillWorksheetData(data, ws, n, deliminator);
}
}
foreach (var ws in xls.Workbook.Worksheets)
{
foreach (var c in ws.Cells)
{
var s = "" + c.Value;
if (s.StartsWith(deliminator[0]) == false &&
s.EndsWith(deliminator[1]) == false)
continue;
s = s.Replace(deliminator[0], "").Replace(deliminator[1], "");
var ss = s.Split('.');
try
{
c.Value = data.Tables[ss[0]].Rows[0][ss[1]];
}
catch { }
}
}
xls.Save();
}
}
}
}
private static void FillWorksheetData(DataSet data, ExcelWorksheet ws, ExcelNamedRange n, string[] deliminator)
{
if (data.Tables.Contains(n.Name) == false)
return;
var dt = data.Tables[n.Name];
int row = n.Start.Row;
var cn = new string[n.Columns];
var st = new int[n.Columns];
for (int i = 0; i < n.Columns; i++)
{
cn[i] = (n.Value as object[,])[0, i].ToString().Replace(deliminator[0], "").Replace(deliminator[1], "");
if (cn[i].Contains("."))
cn[i] = cn[i].Split('.')[1];
st[i] = ws.Cells[row, n.Start.Column + i].StyleID;
}
foreach (DataRow r in dt.Rows)
{
for (int col = 0; col < n.Columns; col++)
{
if (dt.Columns.Contains(cn[col]))
ws.Cells[row, n.Start.Column + col].Value = r[cn[col]];
ws.Cells[row, n.Start.Column + col].StyleID = st[col];
}
row++;
}
// extend table formatting range to all rows
foreach (var t in ws.Tables)
{
var a = t.Address;
if (n.Start.Row.Between(a.Start.Row, a.End.Row) &&
n.Start.Column.Between(a.Start.Column, a.End.Column))
{
ExtendRows(t, dt.Rows.Count - 1);
}
}
}
public static void ExtendRows(ExcelTable excelTable, int count)
{
var ad = new ExcelAddress(excelTable.Address.Start.Row,
excelTable.Address.Start.Column,
excelTable.Address.End.Row + count,
excelTable.Address.End.Column);
//Address = ad;
}
}
public static class int_between
{
public static bool Between(this int v, int a, int b)
{
return v >= a && v <= b;
}
}
}
Và dưới đây là code sử dụng export dữ liệu ra file mẫu Excel:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ExportExcelToTemplateEpplus
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnExport_Click(object sender, EventArgs e)
{
var product = new DataTable();
product.Columns.Add("tenhang", typeof(string));
product.Columns.Add("soluong", typeof(int));
product.Columns.Add("dongia", typeof(int));
product.Rows.Add("Kỷ thuật lập trình C#", 5, 55000);
product.Rows.Add("Cơ sở dữ liệu và thuật toán", 3, 15000);
product.Rows.Add("Giáo trình Photoshop", 20, 65000);
product.Rows.Add("Triết học", 7, 15000);
product.Rows.Add("Lập trình mạng Cisco", 2, 21000);
product.Rows.Add("Làm chủ Microsoft Office 2019", 3, 89000);
product.Rows.Add("Lập trình hướng đối tượng JAVA", 1, 150000);
product.Rows.Add("Giáo trình Android/IOS", 8, 90000);
product.TableName = "productdetails";
var info = new DataTable();
info.Columns.Add("tencuahang");
info.Columns.Add("diachi");
info.Columns.Add("tenkhachhang");
info.Columns.Add("diachikhachhang");
info.Columns.Add("ngaythang");
info.Columns.Add("dienthoai");
info.Rows.Add("NHÀ SÁCH TIN HỌC VB.NET", "Địa chỉ: 05/27 Trung Thành, Quảng Thành, Châu Đức, BRVT", "Tên khách hàng: Nguyễn Thảo", "Địa chỉ: Biên Hòa - Đồng Nai", "Biên Hòa, Ngày 02 tháng 12 năm 2020", "Điện thoại: 0933.913.122");
info.TableName = "info";
var ds = new DataSet();
ds.Tables.Add(product);
ds.Tables.Add(info);
TemplateExcel.FillReport("invoice.xlsx", "template.xlsx", ds, new string[] { "{","}"});
Process.Start("invoice.xlsx");
}
}
}
Thanks for watching!