IRONSOFTWAREHOME
USING IRONXL

在 C# 中使用 StreamReader 读取 Excel 文件的替代方法 - IronXl.Excel

Curtis Chau
Curtis Chau
Updated: 2026年1月5日

许多C#开发人员在尝试读取Excel工作表文件时遇到一个常见的挑战:他们信赖的StreamReader对文本文件效果极佳,但在Excel文档上却神秘地失效。 如果您曾尝试在C#中使用StreamReader读取Excel文件,结果却看到乱码或异常,您不是一个人。 本教程解释了为什么StreamReader不能直接处理Excel文件,并演示了使用IronXL不需要Excel Interop的正确解决方案。

困惑经常源于CSV文件,Excel可以打开,而StreamReader能够正常工作。 然而,真正的 Excel 文件(XLSX、XLS)需要采用完全不同的方法。 理解这一区别将为您节省数小时的调试时间,并引导您找到完成这项工作的正确工具。

使用StreamReader在C#中读取Excel文件的替代方案 - IronXL:图片1 - IronXL

为什么 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
    }
}

当您运行此类程序代码片段时,您将不会看到电子表格数据,而是会遇到二进制未知数据,例如"PK♥♦"或类似的系统字符。 这是因为 XLSX 文件是包含多个 XML 文件的 ZIP 压缩文件,而 XLS 文件使用专有的二进制格式。 StreamReader期望纯文本并尝试将这些复杂结构解释为字符,结果是无意义的输出。

示例输入

使用StreamReader在C#中读取Excel文件的替代方案 - IronXL:图片2 - Excel输入

输出

使用StreamReader在C#中读取Excel文件的替代方案 - IronXL:图片3 - 控制台输出

现代 Excel 文件 (XLSX) 包含多个组件:工作表、样式、共享字符串和关系,所有这些都打包在一起。 这种复杂性需要能够理解 Excel 文件结构的专用库,这就引出了 IronXL。

如何使用 IronXL 读取 Excel 文件?

IronXL为使用 C# 读取 Excel 文件提供了一个简单的解决方案。 与StreamReader不同,IronXL了解Excel的内部结构,并提供直观的方法来访问您的数据。 该库支持 Windows、Linux、macOS 和 Docker 容器,使其成为现代跨平台应用程序的理想选择。

使用StreamReader在C#中读取Excel文件的替代方案 - IronXL:图片4 - 跨平台

首先,通过 NuGet 包管理器安装 IronXL:

PM > Install-Package IronXL.Excel

使用StreamReader在C#中读取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}");
}

这段代码可以成功加载您的 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");
}

WorkBook.FromStream 方法接受任何流类型,无论是FileStream或网络流。 这种灵活性使您无需先将 Excel 文件保存到磁盘即可处理来自各种来源的文件。该示例还演示了如何将工作表数据转换为 DataTable,DataTable 可以与数据库和数据绑定场景无缝集成。

输出

使用StreamReader在C#中读取Excel文件的替代方案 - IronXL:图片6 - 从MemoryStream输出读取Excel

何时使用对象发送器读取数据?

在事件驱动编程中使用该代码的情况下(例如,处理Windows Forms或ASP.NET中的文件上传按钮),一个方法签名通常包括参数,如EventArgs e。 此上下文可确保 Excel 处理逻辑与 UI 或服务事件正确关联。

使用StreamReader在C#中读取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");

这些转换操作会在更改文件格式的同时保留您的数据。 将 Excel 转换为 CSV 时,IronXL 默认会将第一个工作表展平,但您可以指定要导出的工作表。 将 CSV 文件转换为 Excel 文件会生成格式正确的电子表格,该电子表格可以保留数据类型,并支持将来进行格式设置和添加公式。

结论

StreamReader无法处理Excel文件的原因在于纯文本和Excel复杂文件结构之间的基本差异。 虽然StreamReader对于CSV和其他文本格式工作完美,但真正的Excel文件需要一个像IronXL这样的专用库,理解其内部的二进制和XML结构。

IronXL 凭借其直观的 API、全面的格式支持和无缝的流处理功能,提供了一个优雅的解决方案。 无论您是构建 Web 应用程序、桌面软件还是云服务,IronXL 都能在所有平台上可靠地处理 Excel 文件。

准备好开始正确使用Excel文件了吗? 下载 IronXL 的免费试用版,体验在 C# 应用程序中轻松处理 Excel 数据。 对于生产部署,请考虑最适合您项目需求的 IronXL 许可选项

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户