使用 IRONXL 如何在 C# 中導入、讀取和操作 Excel 數據 Jordi Bardia 更新:2026年1月19日 下載 IronXL NuGet 下載 DLL 下載 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 StreamReader 無法讀取 Excel 文件,因為 XLSX/XLS 格式是複雜的二進位或壓縮 XML 結構,而不是純文字。 請改用IronXL庫,它提供了WorkBook.Load()用於文件讀取,以及 FromStream() 用於內存流處理,而無需 Excel Interop 依賴項。 許多 C# 開發人員在嘗試讀取 Excel 表格檔案時會遇到一個常見的挑戰:他們可靠的 StreamReader,對於文字檔案來說效果很好,但對於Excel 文件卻莫名其妙地失敗了。 如果你嘗試在 C# 中使用 StreamReader 讀取 Excel 文件,卻只看到亂碼或異常,那麼你並不孤單。 本教學解釋了為什麼 StreamReader 不能直接處理 Excel 文件,並示範了不使用 Excel Interop 的IronXL 的正確解決方案。 這種混淆通常是因為 Excel 可以開啟的CSV 檔案與 StreamReader 相容。 然而,真正的 Excel 檔案(XLSX、XLS)需要採用完全不同的方法。 理解這一區別將為您節省數小時的調試時間,並引導您找到完成這項工作的正確工具。 對於在Docker 容器或Kubernetes 環境中部署應用程式的工程師來說,這一點尤其重要,因為原生依賴項可能會使容器化變得複雜。 IronXL for .NET主頁展示了無需 Microsoft Office 互通即可讀取 Excel 檔案的 C# 程式碼範例,其中包含庫功能和下載統計資料。 為什麼StreamReader無法讀取Excel檔案? StreamReader 專為純文字檔案設計,使用指定的編碼逐行讀取字元資料。 Excel 檔案雖然看起來像電子表格,但實際上是複雜的二進位或 ZIP 壓縮的 XML 結構,StreamReader 無法解釋。 現代的XLSX 檔案遵循 Office Open XML 標準,而較舊的XLS 檔案使用專有的二進位格式。 static void Main(string[] args) { // This code will NOT work - demonstrates the problem using (StreamReader reader = new StreamReader("ProductData.xlsx")) { string content = reader.ReadLine(); // Attempts to read Excel as text 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(); // Attempts to read Excel as text Console.WriteLine(content); // Outputs garbled binary data } } $vbLabelText $csharpLabel 執行此程式碼片段時,您將看到的不是電子表格數據,而是二進位數據,例如"PK♥♦"或類似字元。 這是因為 XLSX 檔案是包含多個 XML 檔案的 ZIP 壓縮文件,而 XLS 檔案使用專有的二進位格式。 StreamReader 期望純文本,並嘗試將這些複雜的結構解釋為字符,從而導致無意義的輸出。 對於容器化應用程序,嘗試使用原生 Excel 庫或 COM 互通將需要在容器中安裝 Microsoft Office,這將大大增加鏡像大小和複雜性。 當 StreamReader 嘗試處理 Excel 檔案時會發生什麼? 下面的範例展示了一個典型的 Excel 文件,其中包含我們要處理的產品資料。 請注意,在 Excel 中查看時,結構化的電子表格資料看起來多麼清晰有序: 為什麼輸出結果顯示亂碼? 當 StreamReader 嘗試處理此 Excel 檔案時,控制台輸出揭示了根本問題。 由於文件結構無法被解釋為文本,因此您看到的不是可讀數據,而是二進位內容: 現代 Excel 檔案 (XLSX) 包含多個元件:工作表、樣式、共用字串和關係,所有這些都打包在一起。 這種複雜性需要能夠理解Excel 檔案結構的專門函式庫,這就引出了IronXL。 該程式庫在內部處理了所有這些複雜性,同時提供了一個簡單的 API,使其成為無法進行人工幹預的自動化部署管道的理想選擇。 如何使用IronXL讀取 Excel 檔案? IronXL為使用 C# 讀取 Excel 檔案提供了一個簡單的解決方案。 與 StreamReader 不同, IronXL了解 Excel 的內部結構,並提供直覺的方法來存取您的資料。 該程式庫支援Windows、Linux、macOS和Docker 容器,使其成為現代跨平台應用程式的理想選擇。 對於 DevOps 團隊來說,IronXL 的零依賴架構意味著在部署期間無需管理任何本機程式庫或 COM 元件。 首先,透過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 處理能力: // Health check endpoint for containerized apps public async Task<IActionResult> HealthCheck() { try { // Test Excel functionality using var workbook = WorkBook.Create(ExcelFileFormat.XLSX); var sheet = workbook.CreateWorkSheet("HealthCheck"); sheet["A1"].Value = DateTime.UtcNow; // Convert to byte array for validation var bytes = workbook.ToByteArray(); return Ok(new { status = "healthy", excelSupport = true, timestamp = DateTime.UtcNow }); } catch (Exception ex) { return StatusCode(503, new { status = "unhealthy", error = ex.Message }); } } // Health check endpoint for containerized apps public async Task<IActionResult> HealthCheck() { try { // Test Excel functionality using var workbook = WorkBook.Create(ExcelFileFormat.XLSX); var sheet = workbook.CreateWorkSheet("HealthCheck"); sheet["A1"].Value = DateTime.UtcNow; // Convert to byte array for validation var bytes = workbook.ToByteArray(); return Ok(new { status = "healthy", excelSupport = true, timestamp = DateTime.UtcNow }); } catch (Exception ex) { return StatusCode(503, new { status = "unhealthy", error = ex.Message }); } } $vbLabelText $csharpLabel 如何從記憶體流中讀取Excel? 實際應用中經常需要處理來自資料流而不是磁碟檔案的 Excel 檔案。 常見情境包括處理網路上傳、從資料庫擷取檔案或處理來自雲端儲存(如AWS S3或Azure Blob Storage)的資料。 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 DataTable var dataTable = worksheet.ToDataTable(false); // Display 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 DataTable var dataTable = worksheet.ToDataTable(false); // Display DataTable row count Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows"); } $vbLabelText $csharpLabel FromStream 方法接受任何流類型,無論是 FileStream 或網路流。 這種靈活性使您無需先將 Excel 檔案儲存到磁碟即可處理來自各種來源的檔案。此範例還示範如何將工作表資料轉換為 DataTable ,DataTable 可以與資料庫和資料綁定場景無縫整合。 對於微服務架構而言,這種基於流的方法可以最大限度地減少磁碟 I/O 並提高效能。 記憶體流處理會產生哪些結果? Visual Studio 偵錯控制台顯示讀取 Excel 資料的輸出,顯示"工作表有 5 行"和"已載入 5 行資料"。 在Excel讀取場景中,何時應該使用物件傳送器? 在事件驅動程式設計中使用此程式碼的情況下(例如,在 Windows Forms 或ASP.NET中處理檔案上傳按鈕),方法簽章通常包含諸如 object sender 和 EventArgs e 之類的參數。 此上下文可確保 Excel 處理邏輯與 UI 或服務事件正確關聯。 對於容器化 API,您可以直接從 HTTP 請求處理上傳: [HttpPost("upload")] public async Task<IActionResult> ProcessExcelUpload(IFormFile file) { if (file == null || file.Length == 0) return BadRequest("No file uploaded"); using var stream = new MemoryStream(); await file.CopyToAsync(stream); stream.Position = 0; var workbook = WorkBook.FromStream(stream); var worksheet = workbook.DefaultWorkSheet; // Process and return results var data = worksheet.ToDataSet(); return Ok(new { sheets = workbook.WorkSheets.Count, rows = worksheet.RowCount, processed = DateTime.UtcNow }); } [HttpPost("upload")] public async Task<IActionResult> ProcessExcelUpload(IFormFile file) { if (file == null || file.Length == 0) return BadRequest("No file uploaded"); using var stream = new MemoryStream(); await file.CopyToAsync(stream); stream.Position = 0; var workbook = WorkBook.FromStream(stream); var worksheet = workbook.DefaultWorkSheet; // Process and return results var data = worksheet.ToDataSet(); return Ok(new { sheets = workbook.WorkSheets.Count, rows = worksheet.RowCount, processed = DateTime.UtcNow }); } $vbLabelText $csharpLabel 如何在Excel和CSV之間進行轉換? 雖然 StreamReader 可以處理 CSV 文件,但您經常需要在 Excel 和 CSV 格式之間進行轉換。 IronXL讓這種轉換變得非常簡單,這對於 ETL 管道和資料整合場景尤其有用,這些場景在 DevOps 工作流程中很常見: 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 檔案會建立一個格式正確的電子表格,該電子表格可以保留資料類型,並允許將來進行格式設定和新增公式。 對於自動化資料管道,您也可以匯出為 JSON或XML 格式: // Export Excel to multiple formats for data pipelines var workbook = WorkBook.Load("report.xlsx"); // Export to JSON for API responses string jsonData = workbook.ToJson(); // Export to HTML for web display workbook.SaveAsHtml("report.html"); // Export to XML for integration systems workbook.SaveAsXml("report.xml"); // Export specific range to DataTable for database insertion var dataTable = workbook.DefaultWorkSheet["A1:D10"].ToDataTable(); // Export Excel to multiple formats for data pipelines var workbook = WorkBook.Load("report.xlsx"); // Export to JSON for API responses string jsonData = workbook.ToJson(); // Export to HTML for web display workbook.SaveAsHtml("report.html"); // Export to XML for integration systems workbook.SaveAsXml("report.xml"); // Export specific range to DataTable for database insertion var dataTable = workbook.DefaultWorkSheet["A1:D10"].ToDataTable(); $vbLabelText $csharpLabel 容器部署最佳實踐 對於部署 Excel 處理應用程式的工程師來說, IronXL提供了幾個優勢。 以下是一個針對 Excel 處理最佳化的生產就緒型 Dockerfile: FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 # Install any required system fonts for Excel rendering RUN apt-get update && apt-get install -y \ fontconfig \ libfreetype6 \ && rm -rf /var/lib/apt/lists/* FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src COPY ["YourApp.csproj", "."] RUN dotnet restore COPY . . RUN dotnet build -c Release -o /app/build FROM build AS publish RUN dotnet publish -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . # Set environment variables for IronXL ENV IRONXL_LICENSE_KEY=${IRONXL_LICENSE_KEY} ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false ENTRYPOINT ["dotnet", "YourApp.dll"] 此 Dockerfile 可確保您的 Excel 處理應用程式在容器中流暢地執行,並最大限度地減少依賴項。 許可證透過環境變數進行管理,因此可以輕鬆地在不同的部署環境中進行管理。 C#中Excel處理的下一步是什麼? StreamReader 無法處理 Excel 檔案的原因在於純文字與 Excel 複雜的檔案結構之間存在根本差異。 雖然 StreamReader 可以完美地處理 CSV 和其他文字格式,但真正的 Excel 檔案需要像IronXL這樣的專門庫來理解其中的二進位和 XML 結構。 IronXL提供全面的解決方案,其直覺的 API、廣泛的格式支援和無縫的串流處理功能。 無論您是建立Web 應用程式、桌面軟體或雲端服務, IronXL都能在所有平台上可靠地處理 Excel 檔案。 該程式庫支援條件格式、 圖表、公式和進階 Excel 功能,使其成為企業應用程式的完整解決方案。 對於 DevOps 團隊而言,IronXL 的容器友善架構、最小的系統依賴性和可靠的效能特點使其成為現代雲端原生應用程式的理想選擇。 該庫支援水平擴展,可在Kubernetes pod中無縫運行,並能很好地與 CI/CD 管道整合。 準備好開始正確使用Excel檔案了嗎? 下載最符合您專案需求的 IronXL 免費試用版。 該程式庫提供靈活的授權選項,包括開發、測試和生產部署,以及容器化環境和雲端原生應用程式的選項。 常見問題解答 為什麼流讀取器無法在 C# 中直接處理 Excel 文件? 流讀取器是為文本文件設計的,不支持 Excel 文件的二進制格式,這就是為什麼在使用它讀取 Excel 文檔時可能會遇到亂碼或異常的原因。 相反,建議使用如 IronXL 這樣的庫來正確處理 Excel 文件。 C# 中匯入 Excel 數據的建議方法是什麼? 在 C# 中匯入 Excel 數據的建議方法是使用 IronXL。 它允許開發人員在不需要 Excel 通訊的情況下讀取和操作 Excel 文件,提供了一個更簡單和高效的解決方案。 我可以在不使用 Excel 通訊的情況下在 C# 中操作 Excel 文件嗎? 是的,您可以在不使用 Excel 通訊的情況下,通過使用 IronXL 在 C# 中操作 Excel 文件。 它提供了一種在您的 C# 應用程式中直接處理 Excel 文檔的無縫方式。 使用 IronXL 處理 Excel 文件的好處是什麼? IronXL 提供了一些好處,包括讀寫 Excel 文件而不需要 Microsoft Excel、支持各種 Excel 格式和一個強大的 API,這些都簡化了數據操作任務。 IronXL 是否支持讀取具有複雜數據類型的 Excel 文件? 是的,IronXL 支持讀取具有複雜數據類型的 Excel 文件,允許您在 C# 應用程式中高效處理多樣化的數據結構。 IronXL 如何改善在 C# 中處理 Excel 文件的過程? IronXL 通過提供易於使用的界面簡化了處理 Excel 文件的過程,消除了對 Excel 交互操作的需求,降低了代碼的複雜性並提高了性能。 是否可以使用 IronXL 讀寫不同格式的 Excel 文件? 是的,IronXL 支持多種 Excel 文件格式,如 XLSX、XLS、CSV 等,讓您輕鬆讀取和寫入各種格式的文件。 IronXL 能有效處理大型 Excel 文件嗎? IronXL 專為高效處理大型 Excel 文件而設計,提供穩健的性能並在文件操作過程中將內存使用降至最低。 什麼讓 IronXL 成為 C# 開發人員處理 Excel 文件的合適選擇? IronXL 成為 C# 開發人員的合適選擇,因為它提供了一組全面的功能,用於輕鬆讀取、寫入和操作 Excel 文件,而不需 Microsoft Excel 或複雜的通訊依賴。 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工作簿。 閱讀更多 如何使用 IronXL 的 .NET Core CSV 讀取器如何在 C# 中使用 `StreamReade...
更新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工作簿。 閱讀更多