Thao Tác Với Excel Trong C# | How Kteam
Có thể bạn quan tâm
Dẫn nhập
Trong lập trình phần mềm, tool hay cả website. Việc thao tác với file dữ liệu rất cần thiết. Và thao tác với file Excel cũng chiếm tần suất không nhỏ.
Ở bài này, Kteam sẽ hướng dẫn tới bạn Thao tác với file Excel trong C# dùng thư viện EPPlus. EPPlus có một lợi thế là có thể chạy luôn cả ở phía Server.
Nội dung
Để đọc hiểu bài này tốt nhất bạn cần:
- Cài đặt sẵn VISUAL STUDIO.
- Có kiến thức về C# CƠ BẢN, và LẬP TRÌNH WPF.
Bạn và Kteam sẽ cùng tìm hiểu những nội dung sau đây
- Đọc file Excel trong C#
- Ghi dữ liệu ra file Excel và định dạng Cell.
Đọc Excel trong C#
Đầu tiên, chúng ta mở Visual Studio và tạo một project mới
Chọn WPF APP(.NET Framework) hoặc Windows Forms App nếu bạn không rành WPF. Đặt tên project và chọn đường dẫn lưu solution của bạn.
Tại màn hình ban đầu của project.
Bạn thay cặp thẻ
<Grid> </Grid>Bằng
<StackPanel> <DataGrid Height="200" x:Name="dtgExcel"></DataGrid> <Button x:Name="btnImport" Click="btnImport_Click" Content="Import"></Button> <Button x:Name="btnExport" Click="btnExport_Click" Content="Export"></Button> </StackPanel>Chúng ta tạo giao diện có một DataGrid để hiển thị dữ liệu từ Excel và hai Button Import & Export.
Code hoàn chỉnh của MainWindow.xaml
<Window x:Class="ExcelInCsharp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:ExcelInCsharp" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <StackPanel> <DataGrid Height="200" x:Name="dtgExcel"></DataGrid> <Button x:Name="btnImport" Click="btnImport_Click" Content="Import"></Button> <Button x:Name="btnExport" Click="btnExport_Click" Content="Export"></Button> </StackPanel> </Window>Một lưu ý nhỏ, trong sự kiện Click mình đã tạo sẵn một Event Click theo cách nhắc lệnh mà Visual Studio hỗ trợ đó là:
Gõ Click =
Một New Event Handler sẽ hiện lên > bạn chỉ cần nhấn Enter
Sẽ tự tạo một event ở code behind
Bạn nào đã có kiến thức WPF thì có thể bỏ qua. Bạn nào chưa biết có thể xem qua Serial LẬP TRÌNH WPF CƠ BẢN.
Đầu tiên, chúng ta sẽ thực hiện chức năng Import Excel. Code Behind như sau:
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void btnImport_Click(object sender, RoutedEventArgs e) { } private void btnExport_Click(object sender, RoutedEventArgs e) { } }Chúng ta sẽ bắt đầu Import thư viện EPPlus vào để dùng.
Cần 1 thư viện chính đó là EPPLus để thao tác với file Excel.
Mở tab Solution Explore > Nhấp chuột phải vào References > chọn Manage Nuget Packages
r
Trong tab Nuget mở ra. Chọn Browse và gõ từ khóa Selenium vào thanh Search. Install Selenium.WebDriver và Selenium.Chrome.WebDriver hoặc Selenium.Firefox.WebDriver tùy theo trình duyệt bạn dùng.
Chúng ta cần một file excel mẫu để thử Import. Mình tạo sẵn 1 file excel có cấu trúc như sau trong folder Debug. Có tên là:
ImportData.xlsx
Và mình cũng tạo một class gọi là UserInfo để lưu dữ liệu chúng ta đọc được và để đổ dữ liệu lên DataGrid cho thuận tiện.
public class UserInfo { public string Name { get; set; } public DateTime Birthday { get; set; } }Và trong Event btnImport_Click mình sẽ dán đoạn code có comment chi tiết sau và chạy kết quả. Giải thích chi tiết sẽ nói tới trong video hướng dẫn.
private void btnImport_Click(object sender, RoutedEventArgs e) { // tạo ra danh sách UserInfo rỗng để hứng dữ liệu. List<UserInfo> userList = new List<UserInfo>(); try { // mở file excel var package = new ExcelPackage(new FileInfo("ImportData.xlsx")); // lấy ra sheet đầu tiên để thao tác ExcelWorksheet workSheet = package.Workbook.Worksheets[1]; // duyệt tuần tự từ dòng thứ 2 đến dòng cuối cùng của file. lưu ý file excel bắt đầu từ số 1 không phải số 0 for (int i = workSheet.Dimension.Start.Row + 1; i <= workSheet.Dimension.End.Row; i++) { try { // biến j biểu thị cho một column trong file int j = 1; // lấy ra cột họ tên tương ứng giá trị tại vị trí [i, 1]. i lần đầu là 2 // tăng j lên 1 đơn vị sau khi thực hiện xong câu lệnh string name = workSheet.Cells[i, j++].Value.ToString(); // lấy ra cột ngày sinh tương ứng giá trị tại vị trí [i, 2]. i lần đầu là 2 // tăng j lên 1 đơn vị sau khi thực hiện xong câu lệnh // lấy ra giá trị ngày tháng và ép kiểu thành DateTime var birthdayTemp = workSheet.Cells[i, j++].Value; DateTime birthday = new DateTime(); if (birthdayTemp != null) { birthday = (DateTime)birthdayTemp; } /* Đừng lười biến mà dùng đoạn code này sẽ gây ra lỗi nếu giá trị value không thỏa kiểu DateTime DateTime birthday = (DateTime)workSheet.Cells[i, j++].Value; */ // tạo UserInfo từ dữ liệu đã lấy được UserInfo user = new UserInfo() { Name = name, Birthday = birthday }; // add UserInfo vào danh sách userList userList.Add(user); } catch (Exception exe) { } } } catch (Exception ee) { MessageBox.Show("Error!"); } dtgExcel.ItemsSource = userList; }Khuyến cáo: dùng tài liệu trên website và video cùng lúc để đạt hiệu quả cao.
Chạy thử nhấn button Import và xem kết quả
Chúng ta thấy dữ liệu từ file excel đã được đọc lên và đổ vào DataGrid một cách dễ dàng.
Export data ra Excel
Để xuất dữ liệu ra file excel chúng ta dùng đoạn code mẫu sau đã comment rõ ràng và hướng dẫn chi tiết trong video hướng dẫn nhé!
private void btnExport_Click(object sender, RoutedEventArgs e) { string filePath = ""; // tạo SaveFileDialog để lưu file excel SaveFileDialog dialog = new SaveFileDialog(); // chỉ lọc ra các file có định dạng Excel dialog.Filter = "Excel | *.xlsx | Excel 2003 | *.xls"; // Nếu mở file và chọn nơi lưu file thành công sẽ lưu đường dẫn lại dùng if (dialog.ShowDialog() == true) { filePath = dialog.FileName; } // nếu đường dẫn null hoặc rỗng thì báo không hợp lệ và return hàm if (string.IsNullOrEmpty(filePath)) { MessageBox.Show("Đường dẫn báo cáo không hợp lệ"); return; } try { using (ExcelPackage p = new ExcelPackage()) { // đặt tên người tạo file p.Workbook.Properties.Author = "Kteam by K9"; // đặt tiêu đề cho file p.Workbook.Properties.Title = "Báo cáo thống kê"; //Tạo một sheet để làm việc trên đó p.Workbook.Worksheets.Add("Kteam sheet"); // lấy sheet vừa add ra để thao tác ExcelWorksheet ws = p.Workbook.Worksheets[1]; // đặt tên cho sheet ws.Name = "Kteam sheet"; // fontsize mặc định cho cả sheet ws.Cells.Style.Font.Size = 11; // font family mặc định cho cả sheet ws.Cells.Style.Font.Name = "Calibri"; // Tạo danh sách các column header string[] arrColumnHeader = { "Họ tên", "Năm sinh" }; // lấy ra số lượng cột cần dùng dựa vào số lượng header var countColHeader = arrColumnHeader.Count(); // merge các column lại từ column 1 đến số column header // gán giá trị cho cell vừa merge là Thống kê thông tni User Kteam ws.Cells[1, 1].Value = "Thống kê thông tin User Kteam"; ws.Cells[1, 1, 1, countColHeader].Merge = true; // in đậm ws.Cells[1, 1, 1, countColHeader].Style.Font.Bold = true; // căn giữa ws.Cells[1, 1, 1, countColHeader].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; int colIndex = 1; int rowIndex = 2; //tạo các header từ column header đã tạo từ bên trên foreach (var item in arrColumnHeader) { var cell = ws.Cells[rowIndex, colIndex]; //set màu thành gray var fill = cell.Style.Fill; fill.PatternType = ExcelFillStyle.Solid; fill.BackgroundColor.SetColor(System.Drawing.Color.LightBlue); //căn chỉnh các border var border = cell.Style.Border; border.Bottom.Style = border.Top.Style = border.Left.Style = border.Right.Style = ExcelBorderStyle.Thin; //gán giá trị cell.Value = item; colIndex++; } // lấy ra danh sách UserInfo từ ItemSource của DataGrid List<UserInfo> userList = dtgExcel.ItemsSource.Cast<UserInfo>().ToList(); // với mỗi item trong danh sách sẽ ghi trên 1 dòng foreach (var item in userList) { // bắt đầu ghi từ cột 1. Excel bắt đầu từ 1 không phải từ 0 colIndex = 1; // rowIndex tương ứng từng dòng dữ liệu rowIndex++; //gán giá trị cho từng cell ws.Cells[rowIndex, colIndex++].Value = item.Name; // lưu ý phải .ToShortDateString để dữ liệu khi in ra Excel là ngày như ta vẫn thấy.Nếu không sẽ ra tổng số :v ws.Cells[rowIndex, colIndex++].Value = item.Birthday.ToShortDateString(); } //Lưu file lại Byte[] bin = p.GetAsByteArray(); File.WriteAllBytes(filePath, bin); } MessageBox.Show("Xuất excel thành công!"); } catch (Exception EE) { MessageBox.Show("Có lỗi khi lưu file!"); } }Chúng ta thêm 1 giá trị trong DataGrid và nhấn Export.
Chọn nơi cần lưu file
Cùng xem kết quả nào!
Vậy là bạn đã nắm được cách thao tác với file Excel một cách dễ dàng. Thật đơn giản đúng không nào.
Source code tham khảo
Source code mẫu đi kèm bài viết, giúp bạn dễ dàng thao tác theo hướng dẫn và tham khảo tốt hơn.
ExcelInCSharp
Kết luận
Bài viết này đã sơ lược cho các bạn Cách thao tác với Excel trong C#.
Cảm ơn bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quyên “Luyện tập – Thử thách – Không ngại khó”.
Tài liệu
Bài hướng dẫn này là một trong những CHIẾN DỊCH được phổ biến bởi Howkteam.com và sự đóng góp từ cộng đồng. Bạn có thể cùng mọi người yêu cầu và tài trợ để Kteam tạo ra nhiều khóa học hữu ích hơn nữa.
Truy cập và tìm hiểu chi tiết tại:
www.howkteam.vn/requests
Ngoài ra, Kteam hỗ trợ tính năng lưu trữ nội dung bài THAO TÁC VỚI EXCEL TRONG C# dưới dạng file PDF trong link bên dưới.
Đừng quên like hoặc +1 Google để ủng hộ Kteam và tác giả nhé!
Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
Tải xuống
Tài liệu
Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Thao tác với Excel trong C# dưới dạng file PDF trong link bên dưới.
Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com
Đừng quên like và share để ủng hộ Kteam và tác giả nhé!
Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
CỘNG ĐỒNG HỎI ĐÁP HOWKTEAM.COM GROUP THẢO LUẬN FACEBOOKTừ khóa » Thư Viện Epplus
-
Series C# Hay Ho: EPPlus – Thư Viện Excel “bá đạo” – Phần 1
-
Series C# Hay Ho: EPPlus – Thư Viện Excel “bá đạo” – Phần 2
-
Sử Dụng Thư Viện EPPlus.dll Và FlexCel.dll - GÓC LẬP TRÌNH
-
Import File Excel Sử Dụng Thư Viện EPPlus (OfficeOpenXml) Trong Asp ...
-
[C#] Hướng Dẫn Xuất Dữ Liệu Datatable Sang Excel Với ... - Code 24h
-
[C#] Hướng Dẫn Xuất Dữ Liệu Datatable Sang ... - Lập Trình VB.NET
-
Viết Tập Dữ Liệu Lớn Vào Tệp Excel Bằng EPPlus Trong C # - HelpEx
-
Cập Nhật Xuất Dữ Liệu Từ DataTable Sang Tệp Excel Với EPPlus Trong C
-
HƯỚNG DẪN ĐỌC FILE EXCEL BẰNG EPPLUS TRONG ASP NET ...
-
Tạo Báo Cáo PDF Từ Tệp Excel đã Tạo (Thư Viện EPPLUS) - HelpEx
-
How To Properly Export Excel Data To A Listview Using Epplus?
-
[C#] Hướng Dẫn Vẽ Biểu đồ Cột Xuất File Excel Sử Dụng Thư Viện Epplus
-
LUV Revit Tools | Kiến, Thức, Những, Thời, Mình, Cảm, Hỏi, Võ, Chia, Sẻ ...
-
Làm Việc Với Excel Trong -net - @manhng