Mở các tệp Excel theo chương trình trong các ứng dụng C# là một yêu cầu phổ biến, nhưng nhiều nhà phát triển gặp khó khăn với những hạn chế của các phương pháp tiếp cận truyền thống. Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách mở các tệp Excel trong C# bằng Openize.OpenXML SDK - một thư viện mã nguồn mở miễn phí không yêu cầu phải cài đặt Microsoft Excel.

Cách mở tệp Excel trong C# mà không cần cài đặt Excel

Vấn đề với các phương pháp truyền thống

Hầu hết các nhà phát triển đều bắt đầu với Microsoft.Office.Interop.Excel, nhưng cách tiếp cận này có những hạn chế nghiêm trọng:

  • ❌ Yêu cầu cài đặt Excel trên mọi máy
  • ❌ Hiệu suất kém và rò rỉ bộ nhớ
  • ❌ Không phù hợp với ứng dụng máy chủ
  • ❌ Các vấn đề về luồng trong ứng dụng web
  • ❌ Chi phí cấp phép đắt đỏ

Giải pháp: Openize.OpenXML SDK

Openize.OpenXML SDK giải quyết những vấn đề sau:

  • ✅ Không cần cài đặt Excel
  • ✅ Hiệu suất cao và an toàn cho luồng
  • ✅ Hoàn hảo cho các ứng dụng web và máy chủ
  • ✅ Mã nguồn mở và hoàn toàn miễn phí
  • ✅ API đơn giản, trực quan

Cài đặt

Thêm Openize.OpenXML SDK vào dự án của bạn:

<PackageReference Include="DocumentFormat.OpenXml" Version="3.2.0" />

Ví dụ cơ bản: Mở và đọc tệp Excel

using Openize.Cells;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        try
        {
            // Open existing Excel file
            using (var workbook = new Workbook("sample.xlsx"))
            {
                // Get the first worksheet
                var worksheet = workbook.Worksheets[0];
                
                Console.WriteLine($"Worksheet Name: {worksheet.Name}");
                Console.WriteLine($"Total Rows: {worksheet.GetRowCount()}");
                Console.WriteLine($"Total Columns: {worksheet.GetColumnCount()}");
                
                // Read specific cell values
                string cellA1 = worksheet.Cells["A1"].GetValue();
                string cellB1 = worksheet.Cells["B1"].GetValue();
                
                Console.WriteLine($"Cell A1: {cellA1}");
                Console.WriteLine($"Cell B1: {cellB1}");
            }
        }
        catch (FileNotFoundException)
        {
            Console.WriteLine("Excel file not found!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}

Kiểm tra xem tệp Excel có tồn tại trước khi mở không

using Openize.Cells;
using System.IO;

public class ExcelFileHandler
{
    public static void OpenExcelSafely(string filePath)
    {
        // Check if file exists
        if (!File.Exists(filePath))
        {
            Console.WriteLine($"File not found: {filePath}");
            return;
        }
        
        try
        {
            using (var workbook = new Workbook(filePath))
            {
                var worksheet = workbook.Worksheets[0];
                Console.WriteLine($"Successfully opened: {filePath}");
                Console.WriteLine($"First cell value: {worksheet.Cells["A1"].GetValue()}");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Failed to open Excel file: {ex.Message}");
        }
    }
}

Đọc nhiều bài tập

using Openize.Cells;

public class MultiSheetReader
{
    public static void ReadAllWorksheets(string filePath)
    {
        using (var workbook = new Workbook(filePath))
        {
            Console.WriteLine($"Total worksheets: {workbook.Worksheets.Count}");
            
            foreach (var worksheet in workbook.Worksheets)
            {
                Console.WriteLine($"\nWorksheet: {worksheet.Name}");
                Console.WriteLine($"Rows: {worksheet.GetRowCount()}");
                Console.WriteLine($"Columns: {worksheet.GetColumnCount()}");
                
                // Read first few cells
                for (int row = 1; row <= 3; row++)
                {
                    for (int col = 1; col <= 3; col++)
                    {
                        string cellRef = GetCellReference(row, col);
                        string value = worksheet.Cells[cellRef].GetValue();
                        Console.Write($"{value}\t");
                    }
                    Console.WriteLine();
                }
            }
        }
    }
    
    static string GetCellReference(int row, int col)
    {
        return $"{GetColumnLetter(col)}{row}";
    }
    
    static string GetColumnLetter(int columnNumber)
    {
        string columnLetter = string.Empty;
        while (columnNumber > 0)
        {
            columnNumber--;
            columnLetter = (char)('A' + columnNumber % 26) + columnLetter;
            columnNumber /= 26;
        }
        return columnLetter;
    }
}

Phần kết luận

Openize.OpenXML SDK cung cấp một cách đáng tin cậy và hiệu quả để mở các tệp Excel trong C# mà không gặp phải sự phức tạp của Excel Interop. Nó hoàn hảo cho các ứng dụng máy tính để bàn, dịch vụ web và xử lý phía máy chủ. Lợi ích chính:

  • Không cần cài đặt Excel
  • Hiệu suất cao
  • An toàn luồng cho các ứng dụng web
  • Mã nguồn mở và miễn phí
  • API dễ sử dụng Hãy thử áp dụng vào dự án tiếp theo của bạn và trải nghiệm sự khác biệt!