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.

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!