使用 IRONXL 在 C# 中使用 StreamReader 读取 Excel 文件的替代方法 - IronXL.Excel Curtis Chau 已发布:十二月 18, 2025 下载 IronXL NuGet 下载 DLL 下载 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在双子座打开 向 Gemini 询问此页面 打开困惑 向 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 } } IRON VB CONVERTER ERROR developers@ironsoftware.com $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 Install-Package IronXL.Excel SHELL ! 使用 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}"); } 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,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"); 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 文件。 ! C# 中使用 StreamReader 读取 Excel 文件的替代方案 - IronXL:图 8 - 许可 准备好开始正确使用Excel文件了吗? 下载 IronXL 的免费试用版,体验在 C# 应用程序中轻松处理 Excel 数据。 对于生产环境部署,请考虑最适合您项目需求的IronXL 许可选项。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布十二月 19, 2025 如何使用 C# Interop 与 IronXL.Excel 在 Excel 中创建透视表 无需 Office 依赖在 C# 中构建 Excel 数据透视表。IronXL 提供强大的数据处理功能,用于创建透视风格的报告,无需 Excel Interop 复杂化。 阅读更多 已发布十二月 18, 2025 C# 使用 IronXL.Excel 将带列标题的 DataGridView 导出到 Excel 学习如何在将DataGridView数据导出到Excel时保留列头。使用IronXL库的C#逐步教程。 阅读更多 已发布十二月 18, 2025 如何在 C# 中使用 IronXL 创建 Excel 报告 在 C# 中使用 IronXL 进行 Excel 报告生成。学习构建具有格式、公式和数据库集成的专业报告。 阅读更多 如何使用 C# Interop 与 IronXL.Excel 在 Excel 中创建透视表如何使用 IronXL.Excel 在 C# ...
已发布十二月 19, 2025 如何使用 C# Interop 与 IronXL.Excel 在 Excel 中创建透视表 无需 Office 依赖在 C# 中构建 Excel 数据透视表。IronXL 提供强大的数据处理功能,用于创建透视风格的报告,无需 Excel Interop 复杂化。 阅读更多
已发布十二月 18, 2025 C# 使用 IronXL.Excel 将带列标题的 DataGridView 导出到 Excel 学习如何在将DataGridView数据导出到Excel时保留列头。使用IronXL库的C#逐步教程。 阅读更多
已发布十二月 18, 2025 如何在 C# 中使用 IronXL 创建 Excel 报告 在 C# 中使用 IronXL 进行 Excel 报告生成。学习构建具有格式、公式和数据库集成的专业报告。 阅读更多