- [C#] Di chuyển và thay đổi kích thước Control Winform khi ứng dụng đang chạy
- [VB.NET] Chia sẻ source tạo sắp xếp đội hình bóng đá Line-ups đội bóng
- [C#] Hướng dẫn chỉnh sửa Text của label trực tiếp trên winform
- [C#] Hướng dẫn custom TextBox giống Ultraviewer trên Winform
- [C#] Show Modal Winform like Bootstrap
- [DATABASE] Thứ tự thực hiện mệnh đề truy vấn SELECT trong Sqlserver
- [C#] Hướng dẫn viết addin Excel Lấy hình ảnh từ URL internet vào Excel
- [DATABASE] TSQL view max length all column data trên table Sqlserver
- [DEVEXPRESS] Hướng dẫn sử dụng MailMerge kèm Hình ảnh trên Winform
- [DATABASE] Hướng dẫn truy vấn xem kích thước lưu trữ của từng bảng ghi Table trên sqlserver
- [C#] Hướng dẫn Fake Date Time sử dụng thư viện Harmony
- [DATABASE] Phân biệt câu lệnh DDL và DML trong sqlserver
- [C#] Hướng dẫn convert file mã HTML sang file Pdf trên winform
- [DEVEXPRESS] Tạo các loại mã vạch Barcode trực tiếp trên Devexpress Barcode API
- [DEVEXPRESS] Hướng dẫn custom Simple button thành Progressbar
- [DATABASE] Tách số và chữ từ chuỗi - hàm tối ưu hóa tách số và chữ trong Sqlserver
- [C#] Tìm kiếm gần đúng Full Text Search sử dụng thư viện Lucene.NET
- [C#] Chia sẻ tài liệu, sdk và source code máy chấm công dòng máy ZKTeco
- [C#] Memory Cache là gì, và sử dụng trong ứng dụng Winform
- [DATABASE] Khóa chính Primary Key trong Sqlserver
[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!