使用 IRONXL 在 C# 中使用 StreamReader 讀取 Excel 檔案的替代方法 - IronXL.Excel Curtis Chau 更新:2026年1月5日 下載 IronXL NuGet 下載 DLL 下載 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 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)需要採用完全不同的方法。 理解這一區別將為您節省數小時的調試時間,並引導您找到完成這項工作的正確工具。 ! C# 中使用 StreamReader 讀取 Excel 檔案的替代方案 - IronXL:圖 1 - IronXL 為什麼 StreamReader 無法讀取 Excel 檔案? StreamReader專為純文字檔案設計,使用指定的編碼逐行讀取字元資料。 Excel 檔案雖然看起來像電子表格,但實際上是StreamReader無法解釋的複雜二進位或 ZIP 壓縮 XML 結構。 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 } } Option Strict On Imports System.IO Module Program Sub Main(args As String()) ' This code will NOT work - demonstrates the problem Using reader As New StreamReader("ProductData.xlsx") Dim content As String = reader.ReadLine() ' read data Console.WriteLine(content) ' Outputs garbled binary data End Using End Sub End Module $vbLabelText $csharpLabel 當您執行此類程式碼片段時,您將不會看到電子表格數據,而是會遇到二進位未知數據,例如"PK♥♦"或類似的系統字元。 這是因為 XLSX 檔案是包含多個 XML 檔案的 ZIP 壓縮文件,而 XLS 檔案使用專有的二進位格式。 StreamReader期望的是純文本,並嘗試將這些複雜的結構解釋為字符,從而導致輸出毫無意義。 範例輸入 ! C# 中使用 StreamReader 讀取 Excel 檔案的替代方案 - IronXL:圖 2 - Excel 輸入 輸出 ! 使用 C# 中的 StreamReader 讀取 Excel 檔案的替代方案 - IronXL:圖 3 - 控制台輸出 現代 Excel 檔案 (XLSX) 包含多個元件:工作表、樣式、共用字串和關係,所有這些都打包在一起。 這種複雜性需要能夠理解 Excel 檔案結構的專用函式庫,這就引出了 IronXL。 如何使用 IronXL 讀取 Excel 檔案? IronXL為使用 C# 讀取 Excel 檔案提供了一個簡單的解決方案。 與StreamReader不同,IronXL 了解 Excel 的內部結構,並提供直覺的方法來存取您的資料。 該程式庫支援 Windows、Linux、macOS 和 Docker 容器,使其成為現代跨平台應用程式的理想選擇。 ! 使用 C# 中的 StreamReader 讀取 Excel 檔案的替代方案 - IronXL:圖 4 - 跨平台 首先,透過 NuGet 套件管理器安裝 IronXL: Install-Package IronXL.Excel ! 使用 C# 中的 StreamReader 讀取 Excel 檔案的替代方案 - IronXL:圖 5 - 安裝 以下是正確讀取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}"); } Imports IronXL ' Load the Excel file Dim workbook As WorkBook = WorkBook.Load("sample.xlsx") Dim worksheet As WorkSheet = workbook.DefaultWorkSheet ' Read specific cell values Dim cellValue As String = worksheet("A1").StringValue Console.WriteLine($"Cell A1 contains: {cellValue}") ' Read a range of cells For Each cell In worksheet("A1:C5") Console.WriteLine($"{cell.AddressString}: {cell.Text}") Next $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"); } Imports IronXL Imports System.IO ' Read Excel from a memory stream Dim fileBytes As Byte() = File.ReadAllBytes("ProductData.xlsx") Using stream As New MemoryStream(fileBytes) Dim workbook As WorkBook = WorkBook.FromStream(stream) Dim worksheet As WorkSheet = workbook.DefaultWorkSheet ' Process the data Dim rowCount As Integer = worksheet.RowCount Console.WriteLine($"The worksheet has {rowCount} rows") ' Read all data into a new DataTable, return dt Dim dataTable = worksheet.ToDataTable(False) ' Return DataTable row count Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows") End Using $vbLabelText $csharpLabel WorkBook.FromStream方法接受任何流類型,無論是MemoryStream 、 FileStream或網路流。 這種靈活性使您無需先將 Excel 檔案儲存到磁碟即可處理來自各種來源的檔案。此範例還示範如何將工作表資料轉換為 DataTable,DataTable 可以與資料庫和資料綁定場景無縫整合。 輸出 ! C# 中使用 StreamReader 讀取 Excel 檔案的替代方案 - IronXL:圖 6 - 從 MemoryStream 輸出讀取 Excel 文件 何時使用物件傳送器讀取資料? 在事件驅動程式設計中使用此程式碼的情況下(例如,在 Windows Forms 或 ASP.NET 中處理檔案上傳按鈕),此方法簽章通常包含諸如object sender和EventArgs e之類的參數。 此上下文可確保 Excel 處理邏輯與 UI 或服務事件正確關聯。 ! 使用 C# 中的 StreamReader 讀取 Excel 檔案的替代方案 - IronXL:圖 7 - 功能 如何在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"); Imports IronXL ' Load an Excel file and save as CSV Dim workbook As WorkBook = WorkBook.Load("data.xlsx") workbook.SaveAsCsv("output.csv") ' Load a CSV file and save as Excel Dim csvWorkbook As WorkBook = WorkBook.LoadCSV("input.csv") csvWorkbook.SaveAs("output.xlsx") ' Export specific worksheet to CSV Dim worksheet As 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 檔案。 ! C# 中使用 StreamReader 讀取 Excel 檔案的替代方案 - IronXL:圖 8 - 許可 準備好開始正確使用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 已針對效能進行最佳化,並能有效率地處理大型 Excel 檔案,因此適合處理大量資料的應用程式。 IronXL 與其他用於 Excel 操作的 C# 函式庫比較如何? IronXL 提供使用者友善的 API、對 Excel 功能的全面支援,而且不需要安裝 Excel,因此相較於其他函式庫,IronXL 是一個穩健的選擇。 Curtis Chau 立即與工程團隊聊天 技術撰稿人 Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。 相關文章 發表日期 2026年2月15日 如何使用 OleDb vs IronXL.Excel 將 DataTable 匯出至 Excel C# 學習如何使用 OleDb vs IronXL.Excel 將 DataTable 匯出至 Excel C#。 閱讀更多 發表日期 2026年2月15日 如何在未安裝 Office 的情況下使用 IronXL 開啟 VB.NET 中的現有 Excel 檔案 了解如何使用 IronXL for .NET 在未安裝 Office 的情況下在 VB.NET 中開啟現有的 Excel 檔案。 閱讀更多 發表日期 2026年2月15日 C# CSV to XLSX:完整開發人員指南 使用 IronXL 在 C# 中將 CSV 轉換為 XLSX。載入 CSV 檔案、保留資料類型、新增圖表,以及匯出為 Excel 格式,而無需 Microsoft Office 的相依性。 閱讀更多 如何使用 C# 在 Excel 中建立資料透視表,而不需要依賴 Office?如何使用 IronXL.Excel 在 C# ...
發表日期 2026年2月15日 如何使用 OleDb vs IronXL.Excel 將 DataTable 匯出至 Excel C# 學習如何使用 OleDb vs IronXL.Excel 將 DataTable 匯出至 Excel C#。 閱讀更多
發表日期 2026年2月15日 如何在未安裝 Office 的情況下使用 IronXL 開啟 VB.NET 中的現有 Excel 檔案 了解如何使用 IronXL for .NET 在未安裝 Office 的情況下在 VB.NET 中開啟現有的 Excel 檔案。 閱讀更多
發表日期 2026年2月15日 C# CSV to XLSX:完整開發人員指南 使用 IronXL 在 C# 中將 CSV 轉換為 XLSX。載入 CSV 檔案、保留資料類型、新增圖表,以及匯出為 Excel 格式,而無需 Microsoft Office 的相依性。 閱讀更多