Đọc và ghi file Excel trong C#

Microsoft Excel là nhà vô địch không thể tranh cãi của thế giới kinh doanh, cung cấp khả năng tuyệt vời cho mọi ngành và cung cấp thông tin cho những người ra quyết định ở cấp cao nhất trong cấu trúc công ty.

Là một nhà phát triển, nó không phải là một vấn đề khi chúng ta làm việc với các bảng tính Excel. Bài viết này sẽ giới thiệu cách đơn giản nhất mà tôi đã tìm thấy để đọc và ghi file Excel bằng C# sử dụng ExcelMapper.

ExcelMapper là gì?

ExcelMapper là một gói .NET OSS được MIT cấp phép cho phép chúng ta đọc và ghi các file Excel bằng cách sử dụng “Đối tượng C# cũ (POCO)” .

Thư viện hoạt động đa nền tảng bằng cách sử dụng thư viện NPOI thay vì sử dụng công cụ cơ sở dữ liệu Jet được tìm thấy độc quyền trên các thiết bị Windows.

Những người quen thuộc với các thư viện truy cập dữ liệu khác sẽ thấy việc sử dụng ExcelMapper gợi nhớ đến các thư viện như Entity Framework Core hoặc Dapper.

Người dùng cũng có thể làm việc với các đối tượng bản ghi động (dynamic objects and records), cho phép họ sử dụng các tính năng vượt trội trong .NET. ExcelMapper cũng hỗ trợ các khái niệm trong Excel như công thức (formular), định dạng (format) và trang tính (sheet).

Đọc từ một file Excel

Giả sử chúng ta có một file Excel chứa dữ liệu về phim. Cột tiêu đề bao gồm giá trị như Id, Name StreamingService. ExcelMapper có thể tạo ánh xạ động dựa trên các cột của chúng ta, vì vậy chúng ta chỉ cần tạo một bản ghi phù hợp với tên cột của chúng ta.

public record Movie(
    int Id, 
    string Name, 
    string StreamingService
);

Bước tiếp theo là tạo một thể hiện của ExcelMapper và sau đó gọi phương thức FetchAsync với kiểu record của chúng ta.

const string excelFile = "Movies.xlsx";
var excel = new ExcelMapper();
var movies = (await excel.FetchAsync<Movie>(excelFile)).ToList();

Bây giờ chúng ta có thể sử dụng đối tượng movies của chúng ta trong một vòng lặp foreach.

foreach (var movie in movies)
{
    Console.WriteLine(movie);
}

Chạy ứng dụng của chúng ta lên, chúng ta có thể thấy kết quả trong đầu ra console như sau.

Movie { Id = 2, Name = Ted, StreamingService = netflix }
Movie { Id = 5, Name = The Giver, StreamingService = netflix }
Movie { Id = 12, Name = Underworld: Awakening, StreamingService = netflix }
Movie { Id = 17, Name = The Boondock Saints, StreamingService = netflix }
Movie { Id = 24, Name = The Princess and the Frog, StreamingService = netflix }
Movie { Id = 30, Name = Let's Be Cops, StreamingService = netflix }
Movie { Id = 31, Name = We're the Millers, StreamingService = netflix }
Movie { Id = 34, Name = Saw III, StreamingService = netflix }
Movie { Id = 35, Name = The Imitation Game, StreamingService = netflix }
Movie { Id = 38, Name = Transformers: Age of Extinction, StreamingService = netflix }

Ghi vào file Excel

Giống như đọc từ file Excel, trước tiên chúng ta cần tạo một thể hiện của ExcelMapper. Hãy lấy ví dụ đầu tiên của chúng ta, thay đổi giá trị của cột StreamingService và sau đó ghi nó vào một trang tính mới có nhãn disney+. Vì chúng ta đang sử dụng record trong C# 9, chúng ta có thể sử dụng từ khóa with để tạo các bản sao trùng lặp.

using System;
using System.Collections.Generic;
using System.Linq;
using Ganss.Excel;

const string excelFile = "Movies.xlsx";
var excel = new ExcelMapper();
var movies = (await excel.FetchAsync<Movie>(excelFile)).ToList();
var purchasedByDisney = new List<Movie>();
const string disney = "disney+";
foreach (var movie in movies)
{
    Console.WriteLine(movie);
    purchasedByDisney.Add(movie with
    {
        StreamingService = disney
    });
}

await excel.SaveAsync(
    excelFile,
    purchasedByDisney,
    sheetName: disney
);

public record Movie(
    int Id,
    string Name,
    string StreamingService
);

Sau khi chạy chương trình của chúng ta, mở file excel lên chúng ta có thể thấ một trang tính mới được gắn nhãn disney+ như hình dưới đây.

Ghi vào file Excel trong C#

Wow, nó không dễ dàng hơn thế!

Phần kết luận

ExcelMapper cho phép các nhà phát triển .NET tập trung vào dữ liệu trong khi vẫn cấp cho họ quyền truy cập vào các tính năng khiến Excel trở thành một công cụ đa năng tuyệt vời.

Đọc dữ liệu từ file excel và chuyển nó thành các đối tượng POCO, thao tác với các dòng và ghi dữ liệu đó trở lại theo bất kỳ cách nào bạn muốn.

Trong một vài dòng của C# 9, chúng ta có thể làm tất cả những gì chúng ta muốn với nỗ lực tối thiểu. Điều đó sẽ giữ cho những người kinh doanh trong cuộc sống của chúng ta hạnh phúc hơn nhiều.

Cảm ơn đã đọc, và vui lòng để lại bình luận bên dưới.

Nếu Comdy hữu ích và giúp bạn tiết kiệm thời gian làm việc

Bạn có thể vui lòng đưa Comdy vào whitelist của trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi trong việc trả tiền cho dịch vụ lưu trữ web để duy trì hoạt động của trang web.

Lập Trình C#
Bài Viết Liên Quan:
Tạo tập tin Zip với .NET 5
Trung Nguyen 11/11/2021
Tạo tập tin Zip với .NET 5

Trong bài viết này, chúng ta sẽ tìm hiểu lớp tiện ích ZipFile trong C#, cách nén tập tin và thư mục, cùng với giải nén tập tin zip.

Làm việc với PriorityQueue của .NET 6
Trung Nguyen 25/10/2021
Làm việc với PriorityQueue của .NET 6

Bài viết này sẽ giúp bạn tìm hiểu PriorityQueue của .NET 6 là gì, cách chúng ta thêm các phần tử và cách chúng ta có thể xếp hàng lại cho các phần tử.

Hướng dẫn nhanh và ví dụ về pattern matching trong C#
Trung Nguyen 23/10/2021
Hướng dẫn nhanh và ví dụ về pattern matching trong C#

Bài viết này sẽ trình bày một số ví dụ về pattern matching hữu ích và bạn có thể xem xét sử dụng trong các dự án hiện tại hoặc tương lai của bạn.

Sử dụng chuỗi kết nối Redis-CLI trong StackExchange.Redis
Trung Nguyen 18/10/2021
Sử dụng chuỗi kết nối Redis-CLI trong StackExchange.Redis

Bài viết này sẽ hướng dẫn chúng ta cách viết một phương thức mở rộng để phân tích chuỗi kết nối redis-cli có thể sử dụng với thư viện StackExchange.Redis.