如何使用C#获取当前已打开的活动Excel工作簿名称
解决方案
前置准备
首先需要在项目中引入Excel Interop程序集,两种方案可选:
- 传统COM引用:在VS中右键项目→「添加」→「引用」→「COM」选项卡,找到并勾选
Microsoft Excel 16.0 Object Library(对应Excel 2016版本) - NuGet安装:直接搜索安装
Microsoft.Office.Interop.Excel包,适配32/64位Excel 2016,无需手动查找COM组件
核心实现代码
首先引入必要命名空间:
using System.Runtime.InteropServices; using Excel = Microsoft.Office.Interop.Excel;
获取活动工作簿并写入数据的示例代码:
private void WriteToActiveExcelWorkbook(string writeContent) { Excel.Application excelApp = null; Excel.Workbook activeWorkbook = null; Excel.Worksheet activeWorksheet = null; try { // 获取当前正在运行的Excel实例 excelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); // 获取当前活动工作簿 activeWorkbook = excelApp.ActiveWorkbook; if (activeWorkbook == null) { // 无打开的工作簿时的异常处理逻辑 throw new InvalidOperationException("未检测到已打开的Excel工作簿"); } // 获取当前活动工作表 activeWorksheet = (Excel.Worksheet)activeWorkbook.ActiveSheet; // 示例:将ComboBox的内容写入活动工作表第2行第3列(即C2单元格),可自行修改行列索引 // 注意:Excel行列索引从1开始计数 activeWorksheet.Cells[2, 3] = writeContent; // 可选:如果需要自动保存修改 // activeWorkbook.Save(); } catch (COMException ex) when ((uint)ex.ErrorCode == 0x800401E3) { // 未检测到运行中的Excel实例的异常处理 throw new InvalidOperationException("未检测到正在运行的Excel程序,请先打开目标工作簿"); } finally { // 必须释放COM对象,避免Excel进程残留后台 if (activeWorksheet != null) Marshal.ReleaseComObject(activeWorksheet); if (activeWorkbook != null) Marshal.ReleaseComObject(activeWorkbook); if (excelApp != null) Marshal.ReleaseComObject(excelApp); } }
调用示例(ComboBox值写入时调用):
// 取ComboBox选中值传入方法即可,无选中时可自行加空值判断 WriteToActiveExcelWorkbook(comboBox1.SelectedItem?.ToString());
适配多工作簿场景
如果需要操作指定的非活动工作簿,可遍历Excel实例的工作簿集合匹配文件名:
// 替换为你要找的工作簿文件名,例如"测试表.xlsx" string targetWorkbookName = "目标工作簿.xlsx"; Excel.Workbook targetWorkbook = null; foreach (Excel.Workbook wb in excelApp.Workbooks) { if (wb.Name.Equals(targetWorkbookName, StringComparison.OrdinalIgnoreCase)) { targetWorkbook = wb; break; } }
注意事项
- 位数适配:项目属性→「生成」选项卡中,若勾选「Any CPU」需取消勾选「首选32位」,确保程序位数与安装的Excel版本适配,避免COM调用报错
- 权限匹配:不要以管理员权限运行你的程序,除非Excel也以管理员权限启动,跨权限场景下无法获取到运行中的Excel实例
- 异常处理:建议自行补充用户未打开Excel、选中工作簿被保护等场景的异常提示逻辑
内容的提问来源于stack exchange,提问作者jrdnoland
相关产品推荐
相关产品推荐

