IRONSOFTWAREHOME
USING IRONXL

using Microsoft Office Interop Excel C# 读取 Excel 文件:以及一种无需 Office 即可更快创建 Excel 文件的方法

Curtis Chau
Curtis Chau
Updated: 2026年6月28日

如果您曾经尝试使用 MicrosoftOffice InteropExcel C# 读取 Excel 文件,您一定知道其中的挫败感:版本不匹配、COM 对象泄漏,以及必须在运行代码的每台计算机上安装 Microsoft Office 的硬性要求。 在本文中,我们将带您逐步了解传统的Interop方法,解释其不足之处,然后展示IronXL如何让您创建、读取和写入Excel文件,而无需烦恼。

第一步:
arrow pointer

Interop 库如何创建 Excel 工作簿?

Microsoft.Office.Interop.Excel 命名空间公开了 Excel 内部使用的相同 COM 对象模型。 要通过此互操作库读取或创建 Excel 文件,首先需要实例化一个 Application 对象,将新工作簿添加到其 Workbooks 集合中,然后访问各个工作表单元格。 以下示例演示了一个使用 Microsoft.Office.Interop.Excel 创建 XLSX 文件并将值写入单元格的最小控制台应用程序。

using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create the Excel Application COM object
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
    Console.WriteLine("Error: Excel is not properly installed.");
    return;
}
// Add a new workbook and access the default worksheet
Excel.Workbook xlWorkBook = excelApp.Workbooks.Add(Type.Missing);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
// Write data into specific cells
xlWorkSheet.Cells[1, 1] = "Product";
xlWorkSheet.Cells[1, 2] = "Price";
xlWorkSheet.Cells[2, 1] = "Widget";
xlWorkSheet.Cells[2, 2] = "29.99";
// Save as an XLSX file and clean up COM objects
string filepath = @"C:\Reports\products.xlsx";
xlWorkBook.SaveAs(filepath);
xlWorkBook.Close(false);
excelApp.Quit();
// Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(excelApp);

上述代码创建一个 Excel 工作簿,用行和单元格值填充工作表,保存文件,然后手动释放每个 COM 对象。 最后那个清理步骤不是可选项——跳过它,你会发现系统上存在占用内存的幽灵 EXCEL.EXE 进程。 还要注意,代码会检查 Application 对象是否为空; 如果未安装 Microsoft Office,则之后的每一行都会报错。 Office 互操作库的版本必须与计算机上的 Office 版本匹配,否则您将遇到 FileNotFoundException 和类似的运行时错误,这些错误出了名的难以调试。

Visual Basic 开发人员在使用 Excel Microsoft.Office.Interop.Excel 时会遇到同样的挑战,因为.NET语言的底层 COM 基础架构是相同的。

互操作方法在服务器和云端会造成哪些问题?

微软明确不建议在服务器环境中使用 Office Interop。 Interop库在幕后启动Excel应用程序的完整实例,这意味着在Web服务器或云应用程序上的每个请求都会启动一个隐藏的Windows桌面进程。 在Linux服务器上,它完全无法工作。 当未安装 Office 或不同版本的 Microsoft Office 相互冲突时,数据库连接字符串、文件系统路径和用户权限都会成为额外的故障点。

开发者经常在Stack OverflowMicrosoft Q&A上发布关于这些问题的帖子,寻找在不安装 Excel 的情况下读取 Excel 文件和创建 Excel 文件的方法。 下表总结了主要区别。

| 特征 |Office Interop|IronXL| |---|---|---| | 需要安装 Excel | 是的——只有开发人员的机器和所有生产服务器。 | 否 | | 支持的 Excel 文件格式 | XLS、XLSX | XLS、XLSX、CSV、TSV、JSON、XML | | 跨平台(.NET Core、Linux、macOS) |仅限 Windows| Windows、Linux、macOS、Azure | | 需要清理 COM 对象 | 是的——手动 Marshal.ReleaseComObject | 否 | | 服务器/云部署 | 微软不推荐 |完全支持| | 表现 | 速度较慢——启动隐藏的 Excel 进程 | 更佳性能——托管的.NET代码 | | .NET Framework和.NET Core支持 | 仅限.NET Framework | .NET Framework、 .NET Core、 .NET 5-10 |

如何在未安装 Microsoft Office 的情况下创建 Excel 文件?

IronXL是一个.NET Excel 库,它完全使用托管代码读取、写入和创建 Excel 文件。 它不依赖于 Microsoft Office,无需发布 COM 对象,也无需调试版本冲突。 在 Visual Studio 中使用解决方案资源管理器通过NuGet安装IronXL.Excel,即可开始使用。 它在所有主流操作系统上的.NET Framework 4.6.2+、. .NET Core以及.NET 5 到.NET 10 中都能正常运行。

using IronXL;
// Create a new Excel workbook — default value is XLSX format
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet and populate cells with data
WorkSheet workSheet = workBook.CreateWorkSheet("Sales");
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Price";
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 29.99;
// Apply basic formatting
workSheet["A1"].Style.Font.Bold = true;
workSheet["B1"].Style.Font.Bold = true;
// Save the XLSX file
workBook.SaveAs(@"C:\Reports\products.xlsx");

使用IronXL创建的 Excel 文件

使用 MicrosoftOffice InteropExcel 读取 Excel 文件:以及一种无需 Office 创建 Excel 文件的更快方法:图像 1 -IronXL输出文件

上述代码实现了与 Interop 示例相同的结果,但代码行数减少了一半,并且没有外部依赖项。 WorkBook.Create() 初始化一个指定Excel 文件格式(默认为 XLSX)的新工作簿,而 CreateWorkSheet 添加一个命名的工作表。 单元格值通过简洁的索引器语法设置,SaveAs 会自动处理文件扩展名。 没有 Quit(),没有 Marshal.ReleaseComObject,没有隐藏进程。 同一个 API 还支持通过一次方法调用保存为 XLS、CSV、JSON 或 XML 格式,有关所有可用选项,请参阅导出文档

IronXL还可以与 System.Data 对象无缝集成,因此从数据库连接字符串流经 DataTable 的数据可以直接写入工作表,而无需手动逐行迭代。

如何跨行和单元格读取和写入工作表数据?

读取现有的Excel文件同样简单。 WorkBook.Load 方法接受一个字符串类型的文件路径,指向任何 XLS、XLSX 或 CSV 文件。加载完成后,每个工作表都会将其行和单元格作为可迭代集合公开,从而可以轻松地读取数据、修改值或将结果上传到数据库或服务器端点。

using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load(@"C:\Reports\products.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read and display each row of data
foreach (var row in workSheet.Rows)
{
    foreach (var cell in row.ToArray())
    {
        Console.Write(cell.Value + "\t");
    }
    Console.WriteLine();
}
// Update a specific cell and save
workSheet["B2"].Value = 34.99;
workBook.SaveAs(@"C:\Reports\products_updated.xlsx");

使用IronXL读取 Excel 文件

使用 MicrosoftOffice InteropExcel 读取 Excel 文件:以及一种无需 Office 创建 Excel 文件的更快方法:图像 2 - 使用IronXL读取 excel 文件输出

本示例展示了如何通过遍历 Rows 集合并访问每个单元格的 Value 属性来读取 Excel 文件。 嵌套循环模式——先使用 var row,再使用 var cell——反映了你自然而然地思考电子表格的方式。 读取数据后,代码会更新单个单元格并将工作簿保存到新的 XLSX 文件中,同时保留原始文件。 IronXL会在工作表被修改时自动重新计算所有 Excel 公式,互操作库也提供了此功能,但代价是需要启动一个完整的 Excel 实例。

对于公式、条件格式、合并单元格或处理多个工作表等更高级的场景, IronXL API 参考涵盖了所有可用的方法和属性。 该库还支持从ASP.NET控制器访问,因此可以轻松地从 Web 应用程序或 API 端点生成和下载 Excel 文件,而无需在服务器上安装 Office。

.NET Excel自动化的最佳发展路径是什么?

如果一个项目被锁定在已安装 Microsoft Office 且版本稳定的旧版 Windows 桌面环境中,那么互操作库可以很好地完成基本任务。 但对于其他所有情况,例如服务器部署、云应用程序、跨平台构建,或者任何需要更高性能和更少运行时错误的场景,独立的.NET Excel 库显然是最佳选择。

IronXL通过简洁现代的 API 处理所有常见的 Excel 操作(创建工作簿读取Excel 电子表格数据、写入单元格、保存为多种文件扩展名类型,包括 XLS 和 XLSX),该 API 可在任何.NET运行的地方运行。 它同时支持 C# 和 Visual Basic 项目,相同的代码无需修改即可在 Windows、Linux 和 macOS 上运行。

您可以开始 30 天免费试用,在自己的项目中进行测试,或者在准备部署时探索许可选项

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 天试用密钥
无需信用卡或创建账户