在 C# 應用程式中以程式設計方式開啟 Excel 檔案是一項常見要求,但許多開發人員都在努力克服傳統方法的限制。在本指南中,我們將向您展示如何使用 Openize.OpenXML SDK(一個不需要安裝 Microsoft Excel 的免費開源程式庫)在 C# 中開啟 Excel 檔案。

傳統方法的問題 大多數開發人員都是從「Microsoft.Office.Interop.Excel」開始的,但這種方法有嚴重的限制:
- ❌ 需要在每台機器上安裝 Excel
- ❌ 性能不佳和內存洩漏
- ❌ 不適合伺服器應用程式
- ❌ Web 應用程式中的執行緒問題
- ❌昂貴的許可成本
解決方案:Openize.OpenXML SDK
Openize.OpenXML SDK 解決了這些問題:
- ✅ 無需安裝 Excel -✅ 高效能且線程安全
- ✅ 非常適合 Web 應用程式和伺服器 -✅開源且完全免費 -✅簡單、直覺的 API
安裝
將 Openize.OpenXML SDK 新增到您的專案:
<PackageReference Include="DocumentFormat.OpenXml" Version="3.2.0" />
基本範例:開啟並讀取 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}");
}
}
}
在開啟前檢查 Excel 檔案是否存在
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}");
}
}
}
閱讀多個工作表
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;
}
}
結論
Openize.OpenXML SDK 提供了一種可靠、高效的方法來在 C# 中開啟 Excel 文件,而無需 Excel Interop 的複雜性。它非常適合桌面應用程式、Web 服務和伺服器端處理。 主要優點:
- 無需安裝 Excel
- 高效能
- Web 應用程式的線程安全
- 開源且免費
- 易於使用的API 在您的下一個專案中嘗試它並體驗不同之處!