使用 IRONXL 如何使用 StreamReader 在 C# 中讀取 Excel 文件 Jordi Bardia 發表日期:10月 19, 2025 Download IronXL NuGet 下載 DLL 下載 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 許多 C# 開發人員在嘗試閱讀 Excel 表格文件時遇到常見挑戰:他們信任的 StreamReader,雖然對文本文件運行良好,但在 Excel 文件中卻神秘地失效。 如果您嘗試使用 C# 中的 StreamReader 讀取 Excel 文件卻只看到乱码或異常,這並非罕見。 本教程解釋了為什麼 StreamReader 無法直接處理 Excel 文件,並演示了如何使用 IronXL 而不是 Excel Interop 來進行正確的解決方案。 困惑通常來自於 CSV 文件,Excel 可以打開,與 StreamReader 一起工作正常。 然而,真正的 Excel 文件(XLSX、XLS)需要根本不同的方法。 理解這個區別將為您節省數小時的調試時間,並引導您找到正確的工具。 為什麼 StreamReader 無法讀取 Excel 文件? StreamReader 專為純文本文件設計,使用指定的編碼按行讀取字符數據。 Excel 文件儘管像是電子表格,但實際上是複雜的二進制或壓縮 XML 結構,StreamReader 無法解析。 static void Main(string[] args) { // This code will NOT work - demonstrates the problem using (StreamReader reader = new StreamReader("ProductData.xlsx")) { string content = reader.ReadLine(); // read data Console.WriteLine(content); // Outputs garbled binary data } } static void Main(string[] args) { // This code will NOT work - demonstrates the problem using (StreamReader reader = new StreamReader("ProductData.xlsx")) { string content = reader.ReadLine(); // read data Console.WriteLine(content); // Outputs garbled binary data } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 當您運行這段程序代碼時,您會看到二進制數據,如 "PK♥♦" 或類似的系統字符,而不是您的表格數據。 這是因為 XLSX 文件是包含多個 XML 文件的壓縮文件,而 XLS 文件使用專有的二進制格式。 StreamReader 期望純文本並試圖將這些複雜結構解釋為字符,導致無意義的輸出。 示例輸入 輸出 現代 Excel 文件(XLSX)包含多個組件:工作表、樣式、共享字符串和關係,所有這些都是一起打包的。 這種複雜性需要了解 Excel 文件結構的專門庫,這就將我們帶到了 IronXL。 如何使用 IronXL 讀取 Excel 文件? IronXL 提供了一種在 C# 中讀取 Excel 文件的簡單解決方案。 與 StreamReader 不同,IronXL 理解 Excel 的內部結構,並提供直觀的方法來訪問您的數據。 該庫支持 Windows、Linux、macOS 和 Docker 容器,非常適合現代跨平台應用。 首先,通過 NuGet 包管理器安裝 IronXL: Install-Package IronXL.Excel 以下是正確讀取 Excel 文件的方法: using IronXL; // Load the Excel file WorkBook workbook = WorkBook.Load("sample.xlsx"); WorkSheet worksheet = workbook.DefaultWorkSheet; // Read specific cell values string cellValue = worksheet["A1"].StringValue; Console.WriteLine($"Cell A1 contains: {cellValue}"); // Read a range of cells foreach (var cell in worksheet["A1:C5"]) { Console.WriteLine($"{cell.AddressString}: {cell.Text}"); } using IronXL; // Load the Excel file WorkBook workbook = WorkBook.Load("sample.xlsx"); WorkSheet worksheet = workbook.DefaultWorkSheet; // Read specific cell values string cellValue = worksheet["A1"].StringValue; Console.WriteLine($"Cell A1 contains: {cellValue}"); // Read a range of cells foreach (var cell in worksheet["A1:C5"]) { Console.WriteLine($"{cell.AddressString}: {cell.Text}"); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 此代碼成功加載您的 Excel 文件,並提供對單元格值的乾淨訪問。 WorkBook.Load 方法自動檢測文件格式(XLSX、XLS、XLSM、CSV),並在內部處理所有複雜解析。 您可以使用熟悉的 Excel 符號比如 "A1" 或範圍如 "A1:C5" 來訪問單元格,使代碼對任何熟悉 Excel 的人都直觀易懂。 如何從內存流中讀取 Excel? 在實際應用中,常常需要從流而非磁盤文件處理 Excel 文件。 常見場景包括處理網絡上傳、從數據庫檢索文件或處理來自雲存儲的數據。 IronXL 優雅地處理了這些情況: using IronXL; using System.IO; // Read Excel from a memory stream byte[] fileBytes = File.ReadAllBytes("ProductData.xlsx"); using (MemoryStream stream = new MemoryStream(fileBytes)) { WorkBook workbook = WorkBook.FromStream(stream); WorkSheet worksheet = workbook.DefaultWorkSheet; // Process the data int rowCount = worksheet.RowCount; Console.WriteLine($"The worksheet has {rowCount} rows"); // Read all data into a new DataTable, return dt var dataTable = worksheet.ToDataTable(false); // Return DataTable row count Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows"); } using IronXL; using System.IO; // Read Excel from a memory stream byte[] fileBytes = File.ReadAllBytes("ProductData.xlsx"); using (MemoryStream stream = new MemoryStream(fileBytes)) { WorkBook workbook = WorkBook.FromStream(stream); WorkSheet worksheet = workbook.DefaultWorkSheet; // Process the data int rowCount = worksheet.RowCount; Console.WriteLine($"The worksheet has {rowCount} rows"); // Read all data into a new DataTable, return dt var dataTable = worksheet.ToDataTable(false); // Return DataTable row count Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows"); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel WorkBook.FromStream 方法接受任何類型的流,無論是 MemoryStream、FileStream 還是網絡流。 這種靈活性允許您在不先保存到磁盤的情況下從各種來源處理 Excel 文件。該示例還演示了將工作表數據轉換為 DataTable,這與數據庫和數據綁定場景無縫集成。 輸出 何時使用 object sender 來讀取數據? 在此代碼用於事件驅動編程的情況下(例如,處理 Windows Forms 或 ASP.NET 中文件上傳按鈕),方法簽名通常包括像 object sender 和 EventArgs e 這樣的參數。 這個上下文確保 Excel 處理邏輯正確地與 UI 或服務事件聯繫在一起。 如何在 Excel 和 CSV 之間轉換? 雖然 StreamReader 可以處理 CSV 文件,但您常常需要在 Excel 和 CSV 格式之間進行轉換。 IronXL 使這種轉換變得簡單: using IronXL; // Load an Excel file and save as CSV WorkBook workbook = WorkBook.Load("data.xlsx"); workbook.SaveAsCsv("output.csv"); // Load a CSV file and save as Excel WorkBook csvWorkbook = WorkBook.LoadCSV("input.csv"); csvWorkbook.SaveAs("output.xlsx"); // Export specific worksheet to CSV WorkSheet worksheet = workbook.WorkSheets[0]; worksheet.SaveAsCsv("worksheet1.csv"); using IronXL; // Load an Excel file and save as CSV WorkBook workbook = WorkBook.Load("data.xlsx"); workbook.SaveAsCsv("output.csv"); // Load a CSV file and save as Excel WorkBook csvWorkbook = WorkBook.LoadCSV("input.csv"); csvWorkbook.SaveAs("output.xlsx"); // Export specific worksheet to CSV WorkSheet worksheet = workbook.WorkSheets[0]; worksheet.SaveAsCsv("worksheet1.csv"); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 這些轉換會在改變文件格式的同時保留您的數據。 在將 Excel 轉換為 CSV 時,IronXL 會默認展開第一個工作表,但您可以指定導出的工作表。 從 CSV 轉換到 Excel 則會創建出正確格式的電子表格,保留數據類型,並啟用將來的格式和公式添加。 結論 StreamReader 無法處理 Excel 文件的原因由於純文本與 Excel 複雜文件結構之間的基本區別所致。 雖然 StreamReader 對 CSV 和其他文本格式完全有效,但真正的 Excel 文件需要像 IronXL 這樣能夠理解內部二進制和 XML 結構的專門庫。 IronXL 通過其直觀的 API、全面的格式支持和流暢的流處理功能提供了一個優雅的解決方案。 無論您是在構建 Web 應用、桌面軟件還是雲服務,IronXL 都能在所有平台上可靠地處理 Excel 文件。 準備好正確地開始處理 Excel 文件了嗎? 下載 IronXL 的免費試用版,最適合您的項目需求。 常見問題解答 為什麼 StreamReader 無法在 C# 中讀取 Excel 文件? StreamReader 設計用於讀取文本文件,缺乏處理 Excel 文件二進制格式的能力,這會導致亂碼或例外。 IronXL 是什麼? IronXL 是一個 C# 庫,允許開發人員讀取、寫入和操作 Excel 文件,而不需要 Excel Interop,提供了一個更高效且可靠的解決方案。 IronXL 如何改善 C# 中的 Excel 文件讀取過程? IronXL 簡化了讀取 Excel 文件的過程,提供方法來訪問 Excel 數據,無需復雜的 Interop 代碼或處理文件格式的繁瑣細節。 我可以使用 IronXL 在未安裝 Excel 的情況下讀取 Excel 文件嗎? 是的,IronXL 不需要在系統上安裝 Microsoft Excel,它是一個處理 C# 中的 Excel 文件的獨立解決方案。 使用 IronXL 代替 Excel Interop 有哪些優勢? IronXL 更快,消除了需要安裝 Excel 的要求,並降低了通常與 Excel Interop 一起出現的版本兼容性問題的風險。 IronXL 適合用於大型 Excel 文件嗎? 是的,IronXL 經過性能優化,可以高效處理大型 Excel 文件,非常適合處理大量數據的應用程序。 IronXL 是否支持讀取 .xls 和 .xlsx 格式? IronXL 支持 .xls 和 .xlsx 格式,讓開發人員無縫處理各種 Excel 文件類型。 如何在我的 C# 項目中開始使用 IronXL? 您可以通過在 Visual Studio中使用 NuGet 套件管理器安裝 IronXL 並將其整合到您的 C# 項目中來開始使用,以讀取和操作 Excel 文件。 IronXL 的常見使用案例有哪些? IronXL 的常見使用案例包括從 Excel 文件中提取數據、生成報告、數據操作以及自動化 C# 應用中的 Excel 相關任務。 IronXL 可以用於 Web 應用程序中嗎? 是的,IronXL 可用於桌面和網路應用程序中,為在專案中實施 Excel 處理功能提供了靈活性。 Jordi Bardia 立即與工程團隊聊天 軟體工程師 Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。 相關文章 發表日期 10月 27, 2025 如何在 C# 中創建 Excel 樞紐分析表 學習使用 C# Interop 和 IronXL 創建 Excel 中的樞紐分析表,這是一個清晰的分步指南。 閱讀更多 發表日期 10月 27, 2025 如何在 C# 中將 DataGridView 匯出為 Excel 並保留列標題 學習如何在 C# 教程中使用 IronXL library 將 DataGridView 資料匯出為 Excel 同時保留列標題。分步教學。 閱讀更多 發表日期 10月 27, 2025 如何使用 IronXL 的 .NET Core CSV 讀取器 學習使用 IronXL 作為 .NET Core CSV 讀取器的有效方法,提供實用範例。 閱讀更多 如何在 C# 中導入、讀取和操作 Excel 數據如何在 C# 中使用 IronXL 讀...
發表日期 10月 27, 2025 如何在 C# 中將 DataGridView 匯出為 Excel 並保留列標題 學習如何在 C# 教程中使用 IronXL library 將 DataGridView 資料匯出為 Excel 同時保留列標題。分步教學。 閱讀更多