跳至頁尾內容
USING IRONXL

using Microsoft Office Interop Excel C# 讀取 Excel 檔案:以及一種無需 Office 即可更快建立 Excel 檔案的方法

如果您曾經嘗試使用 MicrosoftOffice InteropExcel C# 讀取 Excel 檔案,您可能已經知道其中的挫折:版本不匹配、COM 物件洩漏,以及必須在執行您程式碼的每台機器上安裝 Microsoft Office 的硬性要求。 在本文中,我們將帶您了解傳統的 Interop 方法,解釋其問題所在,然後展示 IronXL 如何讓您建立、讀取和寫入 Excel 檔案,而不需要這些麻煩。

現在開始使用IronXL。
green arrow pointer

Interop 程式庫如何建立 Excel 工作簿?

Microsoft.Office.Interop.Excel 命名空間公開了 Excel 內部使用的相同 COM 物件模型。 要通過這個 interop 程式庫讀取或建立 Excel 檔案,您首先需要建立一個 Application 物件,將新工作簿新增到其 Workbooks 集合,然後存取單獨的工作表儲存格。 以下範例演示了一個使用 Microsoft.Office.Interop.Excel 建立 XLSX 檔案並寫入儲存格值的簡單控制台應用程式。

using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create the Excel Application COM object
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
    Console.WriteLine("Error: Excel is not properly installed.");
    return;
}
// Add a new workbook and access the default worksheet
Excel.Workbook xlWorkBook = excelApp.Workbooks.Add(Type.Missing);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
// Write data into specific cells
xlWorkSheet.Cells[1, 1] = "Product";
xlWorkSheet.Cells[1, 2] = "Price";
xlWorkSheet.Cells[2, 1] = "Widget";
xlWorkSheet.Cells[2, 2] = "29.99";
// Save as an XLSX file and clean up COM objects
string filepath = @"C:\Reports\products.xlsx";
xlWorkBook.SaveAs(filepath);
xlWorkBook.Close(false);
excelApp.Quit();
// Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(excelApp);
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create the Excel Application COM object
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
    Console.WriteLine("Error: Excel is not properly installed.");
    return;
}
// Add a new workbook and access the default worksheet
Excel.Workbook xlWorkBook = excelApp.Workbooks.Add(Type.Missing);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
// Write data into specific cells
xlWorkSheet.Cells[1, 1] = "Product";
xlWorkSheet.Cells[1, 2] = "Price";
xlWorkSheet.Cells[2, 1] = "Widget";
xlWorkSheet.Cells[2, 2] = "29.99";
// Save as an XLSX file and clean up COM objects
string filepath = @"C:\Reports\products.xlsx";
xlWorkBook.SaveAs(filepath);
xlWorkBook.Close(false);
excelApp.Quit();
// Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(excelApp);
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices

' Create the Excel Application COM object
Dim excelApp As Excel.Application = New Excel.Application()
If excelApp Is Nothing Then
    Console.WriteLine("Error: Excel is not properly installed.")
    Return
End If

' Add a new workbook and access the default worksheet
Dim xlWorkBook As Excel.Workbook = excelApp.Workbooks.Add(Type.Missing)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.ActiveSheet, Excel.Worksheet)

' Write data into specific cells
xlWorkSheet.Cells(1, 1) = "Product"
xlWorkSheet.Cells(1, 2) = "Price"
xlWorkSheet.Cells(2, 1) = "Widget"
xlWorkSheet.Cells(2, 2) = "29.99"

' Save as an XLSX file and clean up COM objects
Dim filepath As String = "C:\Reports\products.xlsx"
xlWorkBook.SaveAs(filepath)
xlWorkBook.Close(False)
excelApp.Quit()

' Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet)
Marshal.ReleaseComObject(xlWorkBook)
Marshal.ReleaseComObject(excelApp)
$vbLabelText   $csharpLabel

上述程式碼建立了一個 Excel 工作簿,用行和儲存格值填充了工作表,保存了檔案,然後手動釋放每個 COM 物件。 最後的清理不是可選的 — 如果跳過,您會發現幽靈 EXCEL.EXE 進程消耗您系統的記憶體。 還要注意,程式碼會檢查 Application 物件是否為空; 如果未安裝 Microsoft Office,則之後的每一行都會丟擲錯誤。 當 Office interop 程式庫的版本與機器上的 Office 版本不匹配時,您將面臨 FileNotFoundException 及類似的執行時錯誤,這些錯誤特別難以除錯。

Visual Basic 開發人員使用 Excel Microsoft.Office.Interop.Excel 時遇到相同的挑戰,因為基礎的 COM 基礎結構在 .NET 語言中是一致的。

Interop 方法在伺服器和雲端中造成哪些問題?

Microsoft 明確不建議在伺服器環境中使用 Office Interop。 interop 程式庫在背後啟動了一個完整的 Excel 應用程式實例,這意味著每個 web 伺服器或雲應用程式上的請求都會啟動一個隱藏的 Windows 桌面進程。 在 Linux 伺服器上,它根本無法運作。 連接至資料庫的連接字串、檔案系統路徑和使用者許可權都成為 Office 未安裝或不同版本的 Microsoft Office 相互衝突時的額外失敗點。

開發人員經常在 Stack OverflowMicrosoft Q&A 上發表這些問題,尋找在未安裝 Excel 的情況下讀取 Excel 文件和建立 Excel 文件的方法。 下表總結了主要差異。

|功能|Office Interop|IronXL| |---|---|---| |需要安裝 Excel|是的 — 僅限於開發者機器和每個生產伺服器|不需要| |支持的 Excel 檔案格式|XLS, XLSX| XLS, XLSX, CSV, TSV, JSON, XML | |跨平台(.NET Core, Linux, macOS)|僅限於 Windows|Windows, Linux, macOS, Azure| |需要 COM 物件清理|是的 — 手動 Marshal.ReleaseComObject|不需要| |伺服器/雲端部署|Microsoft 不建議|完全支持| |性能|較慢 — 啟動隱藏的 Excel 進程|更好的性能 — 管理的 .NET 程式碼| |.NET Framework 和 .NET Core 支持|僅限於 .NET Framework| .NET Framework, .NET Core, .NET 5–10 |

如何在未安裝 Microsoft Office 的情況下建立 Excel 檔案?

IronXL 是一個.NET Excel 程式庫,可完全使用管理程式碼讀取、寫入和建立 Excel 檔案。 沒有對 Microsoft Office 的依賴,沒有需要釋放的 COM 物件,沒有需要除錯的版本衝突。 在 Visual Studio 中使用 Solution Explorer 通過 NuGet 安裝,搜尋 IronXL.Excel,您就可以開始了。 它可以在所有主要操作系統上的 .NET Framework 4.6.2+、.NET Core 和 .NET 5 到 .NET 10 上正常運作。

using IronXL;
// Create a new Excel workbook — default value is XLSX format
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet and populate cells with data
WorkSheet workSheet = workBook.CreateWorkSheet("Sales");
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Price";
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 29.99;
// Apply basic formatting
workSheet["A1"].Style.Font.Bold = true;
workSheet["B1"].Style.Font.Bold = true;
// Save the XLSX file
workBook.SaveAs(@"C:\Reports\products.xlsx");
using IronXL;
// Create a new Excel workbook — default value is XLSX format
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet and populate cells with data
WorkSheet workSheet = workBook.CreateWorkSheet("Sales");
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Price";
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 29.99;
// Apply basic formatting
workSheet["A1"].Style.Font.Bold = true;
workSheet["B1"].Style.Font.Bold = true;
// Save the XLSX file
workBook.SaveAs(@"C:\Reports\products.xlsx");
Imports IronXL

' Create a new Excel workbook — default value is XLSX format
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
' Add a worksheet and populate cells with data
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("Sales")
workSheet("A1").Value = "Product"
workSheet("B1").Value = "Price"
workSheet("A2").Value = "Widget"
workSheet("B2").Value = 29.99
' Apply basic formatting
workSheet("A1").Style.Font.Bold = True
workSheet("B1").Style.Font.Bold = True
' Save the XLSX file
workBook.SaveAs("C:\Reports\products.xlsx")
$vbLabelText   $csharpLabel

使用IronXL建立的 Excel 檔案

使用 MicrosoftOffice InteropExcel C# 讀取 Excel 檔案:以及一種不使用 Office 的更快建立 Excel 檔案的方法:圖片 1 -IronXL輸出文件

上述程式碼實現了與 Interop 範例相同的結果,但使用了較少的行數且沒有任何外部依賴。 WorkBook.Create() 在指定的Excel 檔案格式(預設為 XLSX)中初始化了一個新工作簿,CreateWorkSheet 則新增了一個命名的工作表。 透過清晰的索引器語法設定單元格值,SaveAs 會自動處理檔案副檔名。 無需 Quit(),無需 Marshal.ReleaseComObject,無需隱藏進程。 同一個 API 也支持以單一方法調用將檔案保存為 XLS、CSV、JSON 或 XML,請參閱匯出文件以獲取所有可用選項。

IronXL 也能夠與 System.Data 物件潔淨整合,因此從資料庫連接字串流入 DataTable 的資料可以直接寫入工作表,不需要手動逐行迭代。

如何跨行和單元格讀寫工作表資料?

讀取現有 Excel 檔案同樣簡單。 WorkBook.Load 方法接受任何 XLS、XLSX 或 CSV 檔案的字串檔案路徑。從那裡,每個工作表將其行和單元格公開為可迭代的集合,使其簡單易用,可以讀取資料、修改值或將結果上傳到資料庫或伺服器端點。

using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load(@"C:\Reports\products.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read and display each row of data
foreach (var row in workSheet.Rows)
{
    foreach (var cell in row.ToArray())
    {
        Console.Write(cell.Value + "\t");
    }
    Console.WriteLine();
}
// Update a specific cell and save
workSheet["B2"].Value = 34.99;
workBook.SaveAs(@"C:\Reports\products_updated.xlsx");
using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load(@"C:\Reports\products.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read and display each row of data
foreach (var row in workSheet.Rows)
{
    foreach (var cell in row.ToArray())
    {
        Console.Write(cell.Value + "\t");
    }
    Console.WriteLine();
}
// Update a specific cell and save
workSheet["B2"].Value = 34.99;
workBook.SaveAs(@"C:\Reports\products_updated.xlsx");
Imports IronXL

' Load an existing Excel file
Dim workBook As WorkBook = WorkBook.Load("C:\Reports\products.xlsx")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet

' Read and display each row of data
For Each row In workSheet.Rows
    For Each cell In row.ToArray()
        Console.Write(cell.Value & vbTab)
    Next
    Console.WriteLine()
Next

' Update a specific cell and save
workSheet("B2").Value = 34.99
workBook.SaveAs("C:\Reports\products_updated.xlsx")
$vbLabelText   $csharpLabel

使用IronXL讀取 Excel 檔案

使用 MicrosoftOffice InteropExcel C# 讀取 Excel 檔案:以及一種不使用 Office 的更快建立 Excel 檔案的方法:圖片 2 - 使用IronXL讀取 Excel 文件輸出

此範例展示了如何通過迭代行集合並存取每個單元格的 Value 屬性讀取 Excel 檔案。 巢狀的迴圈模式 — var row 接著 var cell — 反映了您如何自然地考慮電子表格。 在讀取資料之後,程式碼會更新一個單一單元格,並將工作簿保存為新的 XLSX 檔案,同時保留原始檔案。IronXL在修改表時自動重新計算任何 Excel 公式,這是 interop 程式庫也有的功能,但代價是需要啟動完整的 Excel 實例。

有關更高級的方案,例如公式、條件格式化、合併單元格或多工作表工作,IronXL API 參考涵蓋了每個可用的方法和屬性。 該程式庫還支持從 ASP.NET 控制器存取,使其更易於從 web 應用程式或 API 端點生成和下載 Excel 文件,而無需在伺服器上安裝 Office。

什麼是 .NET Excel 自動化的最佳路徑?

如果一個專案鎖定在一個具有 Microsoft Office 已經安裝的傳統 Windows 桌面環境中,並且相同的版本將保持穩定,則 interop 程式庫可以很好地應對基本任務。 但對於其他一切,伺服器部署、雲應用程式、跨平台構建或任何希望獲得更好性能和更少運行時錯誤的情景,獨立的 .NET Excel 程式庫是明智的選擇。

IronXL 通過清晰、現代的 API 處理每個常見的 Excel 操作(建立工作簿讀取 Excel 表格資料、寫入單元格、在多種檔案副檔名型別中保存,包括 XLS 和 XLSX),該 API 可以在 .NET 工作的任何地方運行。 它支持 C# 和 Visual Basic 專案,且相同程式碼在 Windows、Linux 和 macOS 上運行無需更改。

開始免費的 30 天試用來在您自己的專案中測試,或在您準備好部署時探索授權選項

常見問題

using Microsoft Office Interop Excel 在 C# 中有哪些限制?

using Microsoft Office Interop Excel 在 C# 中可能會導致版本不匹配、COM 物件洩漏以及必須在運行程式的每台機器上安裝 Microsoft Office。

IronXL 如何改善 C# 中的 Excel 文件處理過程?

IronXL 允許您建立、讀取和寫入 Excel 文件,而不需要 Microsoft Office,消除了版本不匹配和 COM 物件洩漏等問題。

IronXL 能否在未安裝 Microsoft Office 的伺服器上使用?

是的,IronXL 是伺服器安全的,不需要安裝 Microsoft Office,使其成為處理 Excel 文件的跨平台解決方案。

using IronXL 比 Excel Interop 有哪些優勢?

IronXL 提供了一種更可靠和高效的 Excel 文件處理方式,因為它不依賴 Microsoft Office,減少了版本不匹配和 COM 物件洩漏等常見問題的風險。

IronXL 是否與所有版本的 Excel 文件相容?

IronXL 支持多種 Excel 文件格式,包括 XLSX、XLS、CSV 和 TSV,使其適用於各種 Excel 文件操作。

IronXL 是否需要在機器上進行任何特別設置才能工作?

IronXL 不需要安裝 Microsoft Office,並且可以輕鬆整合到您的 C# 項目中,無需特殊設置。

IronXL能否有效處理大型Excel文件?

是的,IronXL 專為高效讀取和寫入大型 Excel 文件而設計,提供快速性能,無需面臨 Interop 的限制。

IronXL支持哪些平台?

IronXL 是跨平台的,支持 Windows、Linux 和 MacOS,這使它成為在不同環境中進行 Excel 文件操作的靈活選擇。

IronXL 如何處理 Excel 文件建立?

IronXL 提供了一個簡單的 API,讓您可以在 C# 中以程式設計方式建立 Excel 文件,提供用於格式化儲存格、管理工作表等的功能。

IronXL 使用者是否有社群或支援?

是的,IronXL 使用者可以獲得文件、教程和社群支援,以幫助解決任何整合或使用問題。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話