使用 IRONXL C# 中讀取 Excel 檔案的 StreamReader 替代方案 - IronXL Jordi Bardia 更新:2026年1月5日 下載 IronXL NuGet 下載 DLL 下載 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 許多 C# 開發人員在嘗試讀取 Excel 表格檔案時會遇到一個常見的挑戰:他們可靠的 StreamReader,對於文字檔案來說效果很好,但對於 Excel 文件卻莫名其妙地失敗了。 如果你嘗試在 C# 中使用 StreamReader 讀取 Excel 文件,卻只看到亂碼或異常,那麼你並不孤單。 本教學解釋了為什麼 StreamReader 不能直接處理 Excel 文件,並示範了不使用 Excel Interop 的IronXL 的正確解決方案。 這種混淆通常是因為 Excel 可以開啟 CSV 文件,而 StreamReader 可以正常開啟 CSV 檔案。 然而,真正的 Excel 檔案(XLSX、XLS)需要採用完全不同的方法。 理解這一區別將為您節省數小時的調試時間,並引導您找到完成這項工作的正確工具。 為什麼 StreamReader 無法讀取 Excel 檔案? StreamReader 專為純文字檔案設計,使用指定的編碼逐行讀取字元資料。 Excel 檔案雖然看起來像電子表格,但實際上是複雜的二進位或 ZIP 壓縮的 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 } } $vbLabelText $csharpLabel 當您執行此類程式碼片段時,您將不會看到電子表格數據,而是會遇到二進位未知數據,例如"PK♥♦"或類似的系統字元。 這是因為 XLSX 檔案是包含多個 XML 檔案的 ZIP 壓縮文件,而 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}"); } $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"); } $vbLabelText $csharpLabel WorkBook.FromStream 方法接受任何流類型,無論是 FileStream 或網路流。 這種靈活性使您無需先將 Excel 檔案儲存到磁碟即可處理來自各種來源的檔案。此範例還示範如何將工作表資料轉換為 DataTable,DataTable 可以與資料庫和資料綁定場景無縫整合。 輸出 何時使用物件傳送器讀取資料? 在事件驅動程式設計中使用此程式碼的情況下(例如,在 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"); $vbLabelText $csharpLabel 這些轉換操作會在變更檔案格式的同時保留您的資料。 將 Excel 轉換為 CSV 時, IronXL預設會將第一個工作表展平,但您可以指定要匯出的工作表。 將 CSV 檔案轉換為 Excel 檔案會產生格式正確的電子表格,該電子表格可以保留資料類型,並支援將來進行格式設定和新增公式。 結論 StreamReader 無法處理 Excel 檔案的原因在於純文字與 Excel 複雜的檔案結構之間存在根本差異。 雖然 StreamReader 可以完美地處理 CSV 和其他文字格式,但真正的 Excel 檔案需要像IronXL這樣的專門庫來理解其中的二進位和 XML 結構。 IronXL憑藉其直覺的 API、全面的格式支援和無縫的串流處理功能,提供了一個優雅的解決方案。 無論您是建立 Web 應用程式、桌面軟體或雲端服務, IronXL都能在所有平台上可靠地處理 Excel 檔案。 準備好開始正確使用Excel檔案了嗎? 下載 IronXL 的免費試用版,體驗在 C# 應用程式中輕鬆處理 Excel 資料。 對於生產環境部署,請考慮最適合您專案需求的IronXL授權選項。 常見問題解答 為什麼我不能使用 StreamReader 在 C# 中讀取 Excel 檔案? StreamReader 專為讀取文字檔案而設計,不支援 Excel 檔案的二進位格式,因此會產生亂碼或異常。 在 C# 中讀取 Excel 檔案的建議方式是什麼? 在 C# 中讀取 Excel 檔案的建議方法是使用 IronXL,它可以直接讀取和處理 Excel 檔案,而不需要 Excel Interop。 對 Excel 檔案使用 IronXl.Excel 較 StreamReader 有哪些優點? IronXl.Excel 是專為處理 Excel 檔案格式而設計,可準確讀取和處理資料,並支援公式、圖表和格式化等各種功能。 使用 IronXl.Excel 是否需要 Excel Interop? 不,IronXl.Excel 可獨立於 Excel Interop 運作,讓您無需在機器上安裝 Excel 即可處理 Excel 檔案。 IronXL 是否能處理不同的 Excel 文件格式? 是的,IronXL 支援多種 Excel 檔案格式,包括 .xls、.xlsx 和 .csv,可靈活處理不同類型的 Excel 文件。 IronXL 適合用於大型 Excel 文件嗎? 是的,IronXL 經過性能優化,可以高效處理大型 Excel 文件,非常適合處理大量數據的應用程序。 IronXL 與其他用於 Excel 操作的 C# 函式庫比較如何? IronXL 提供使用者友善的 API、對 Excel 功能的全面支援,而且不需要安裝 Excel,因此相較於其他函式庫,IronXL 是一個穩健的選擇。 Jordi Bardia 立即與工程團隊聊天 軟體工程師 Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担產品测测试,產品開發和研究的责任時,Jordi 為持续的產品改進增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。 相關文章 更新2026年3月1日 在ASP.NET C#中下載Excel文件:將數據匯出到XLSX,CSV和更多格式 使用C#和IronXL在ASP.NET Core中下載Excel文件。從MVC控制器中匯出數據到XLSX, CSV和XML,附有MemoryStream和File()返回。包括代碼範例。 閱讀更多 更新2026年3月1日 如何在Blazor中使用IronXL匯出Excel文件 學習如何在Blazor伺服器應用程式中使用IronXL将數據匯出到Excel。此指南涵蓋專案設置、服務設計、條件格式化、多表報告和錯誤處理,附有完整的C#代碼範例。 閱讀更多 更新2026年2月27日 如何在C#中而不是使用StreamReader來讀取Excel文件 了解StreamReader為何無法讀取Excel文件,並學習如何使用IronXL加載來自磁盤或內存流的XLSX和XLS工作簿。 閱讀更多 如何在不依賴 Office 的情況下,使用 C# 在 Excel 中建立樞紐分析表?如何使用 IronXL 在 C# 中產...
更新2026年3月1日 在ASP.NET C#中下載Excel文件:將數據匯出到XLSX,CSV和更多格式 使用C#和IronXL在ASP.NET Core中下載Excel文件。從MVC控制器中匯出數據到XLSX, CSV和XML,附有MemoryStream和File()返回。包括代碼範例。 閱讀更多
更新2026年3月1日 如何在Blazor中使用IronXL匯出Excel文件 學習如何在Blazor伺服器應用程式中使用IronXL将數據匯出到Excel。此指南涵蓋專案設置、服務設計、條件格式化、多表報告和錯誤處理,附有完整的C#代碼範例。 閱讀更多
更新2026年2月27日 如何在C#中而不是使用StreamReader來讀取Excel文件 了解StreamReader為何無法讀取Excel文件,並學習如何使用IronXL加載來自磁盤或內存流的XLSX和XLS工作簿。 閱讀更多