Khi bạn đã biết xử lý và hiển thị dữ liệu trên DataGridView, yêu cầu sau cùng là việc kết xuất dữ liệu ra tệp tin để in ấn hoặc lưu trữ. Kết xuất dữ liệu từ DataGridView ra tệp Excel là một trong những vấn đề được nhiều bạn quan tâm. Vậy bài viết này tôi trình bày cách để các bạn có thể làm được điều đó.
Giả sử bạn cần kết xuất dữ liệu ra 1 tệp Excel có định dạng như sau (Đơn giản để các bạn dễ hình dung):
Vậy bạn cần thiết kế giao diện Form tương tự như sau:
Lưu ý: Trong DataGridView trên có 1 cột mã đơn vị ẩn đi.
Việc hiển thị dữ liệu và thao tác trên DataGridView trong bài này mặc nhiên là bạn đã biết. Nếu chưa biết bạn có thể tham khảo các bài trước đó tôi đã trình bày để có được dữ liệu như trên.
Bây giờ khi tôi nhấn nút kết xuất thì dữ liệu trong DataGridView được chuyển qua tệp Excel. Vậy cách làm như sau:
Bước 1: Bạn cần thêm thư viện thao tác với Excel vào dự án, theo hướng dẫn sau:
Bước 2: Tạo 1 thư viện thao tác với tệp Excel (tạo thêm 1 file .cs có tên ExportToExcel).
Bạn xây dựng một phương thức Export với tham số truyền vào là 1 đối tượng DataTable chứa dữ liệu muốn kết xuất, có thể thêm các tham số SheetName (tên Sheet trong Excel) hay tiêu đề nếu có.
Bạn tham khảo code sau:
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Data;
namespace
DemoDataGridView
{
class
ExportToExcel
{
public
void
Export(DataTable dt,
string
sheetName,
string
title)
{
Microsoft.Office.Interop.Excel.Application oExcel =
new
Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbooks oBooks;
Microsoft.Office.Interop.Excel.Sheets oSheets;
Microsoft.Office.Interop.Excel.Workbook oBook;
Microsoft.Office.Interop.Excel.Worksheet oSheet;
oExcel.Visible =
true
;
oExcel.DisplayAlerts =
false
;
oExcel.Application.SheetsInNewWorkbook = 1;
oBooks = oExcel.Workbooks;
oBook = (Microsoft.Office.Interop.Excel.Workbook)(oExcel.Workbooks.Add(Type.Missing));
oSheets = oBook.Worksheets;
oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oSheets.get_Item(1);
oSheet.Name = sheetName;
Microsoft.Office.Interop.Excel.Range head = oSheet.get_Range(
"A1"
,
"C1"
);
head.MergeCells =
true
;
head.Value2 = title;
head.Font.Bold =
true
;
head.Font.Name =
"Tahoma"
;
head.Font.Size =
"18"
;
head.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
Microsoft.Office.Interop.Excel.Range cl1 = oSheet.get_Range(
"A3"
,
"A3"
);
cl1.Value2 =
"Mã đơn vị"
;
cl1.ColumnWidth = 13.5;
Microsoft.Office.Interop.Excel.Range cl2 = oSheet.get_Range(
"B3"
,
"B3"
);
cl2.Value2 =
"Tên đơn vị"
;
cl2.ColumnWidth = 25.0;
Microsoft.Office.Interop.Excel.Range cl3 = oSheet.get_Range(
"C3"
,
"C3"
);
cl3.Value2 =
"Chức năng"
;
cl3.ColumnWidth = 40.0;
Microsoft.Office.Interop.Excel.Range rowHead = oSheet.get_Range(
"A3"
,
"C3"
);
rowHead.Font.Bold =
true
;
rowHead.Borders.LineStyle = Microsoft.Office.Interop.Excel.Constants.xlSolid;
rowHead.Interior.ColorIndex = 15;
rowHead.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
object
[,] arr =
new
object
[dt.Rows.Count, dt.Columns.Count];
for
(
int
r = 0; r < dt.Rows.Count; r++)
{
DataRow dr = dt.Rows[r];
for
(
int
c = 0; c < dt.Columns.Count; c++)
{
arr[r, c] = dr[c];
}
}
int
rowStart = 4;
int
columnStart = 1;
int
rowEnd = rowStart + dt.Rows.Count - 1;
int
columnEnd = dt.Columns.Count;
Microsoft.Office.Interop.Excel.Range c1 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[rowStart, columnStart];
Microsoft.Office.Interop.Excel.Range c2 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[rowEnd, columnEnd];
Microsoft.Office.Interop.Excel.Range range = oSheet.get_Range(c1, c2);
range.Value2 = arr;
range.Borders.LineStyle = Microsoft.Office.Interop.Excel.Constants.xlSolid;
Microsoft.Office.Interop.Excel.Range c3 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[rowEnd, columnStart];
Microsoft.Office.Interop.Excel.Range c4 = oSheet.get_Range(c1,c3 );
oSheet.get_Range(c3, c4).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
}
}
}
Bước 3: Bây giờ bạn chỉ việc gọi phương thức Export của lớp vừa xây dựng trên Form khi nhấn nút “Kết xuất ra Excel”
private
void
btnExportExcel_Click(
object
sender, EventArgs e)
{
ExportToExcel excel =
new
ExportToExcel();
DataTable dt = (DataTable) bs.DataSource;
excel.Export(dt,
"Danh sach"
,
"DANH SÁCH CÁC ĐƠN VỊ"
);
}
Bước 4: Chạy và thử nghiệm bạn sẽ có kết quả tương tự sau:
Chúc bạn thành công!