在c#中获取当前工作簿对象

本文关键字:工作簿 对象 获取 | 更新日期: 2023-09-27 18:12:29

我一直在用c#编写一个应用程序,该应用程序在Excel电子表格中创建自定义文档属性,我有一个函数用于此,该函数采用工作簿对象…

然而,实际获得当前工作簿对象被证明是相当烦人的,我使用ExcelDNA来添加功能,然而,我似乎不能传递我的函数一个有效的工作簿COM对象。

在c#中获取当前工作簿对象

如果您需要查找activeworkbook与C#,如果您正在使用Office互操作,您可以尝试这种代码:

(Workbook)Globals.ThisAddIn.Application.ActiveWorkbook;
[源]

我现在就是这么做的,看起来效果还不错

using Excel = Microsoft.Office.Interop.Excel;      

然后得到活动工作簿

//Gets Excel and gets Activeworkbook and worksheet
Excel.Application oXL;
Excel.Workbook oWB;
Excel.Worksheet oSheet;
oXL = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); 
oXL.Visible = true;
oWB = (Excel.Workbook)oXL.ActiveWorkbook; 
           
docProps = oWB.CustomDocumentProperties

那我就试试你的方法,看看效果如何

希望能有所帮助

正如@ gov在上面的评论中解释的那样:

using Excel = Microsoft.Office.Interop.Excel;
using ExcelDna.Integration;
// Get the correct application instance
Excel.Application xlapp = (Excel.Application)ExcelDnaUtil.Application;
// Get active workbook
Excel.Workbook wbook = xlapp.ActiveWorkbook;

GetActiveObject()查看运行对象表(ROT),并给出最后一个打开的Excel实例,该实例可能与顶级Z顺序Excel窗口不对应。

通过Z顺序循环查找匹配的工作簿。

请看这个链接:-https://social.msdn.microsoft.com/forums/office/en - us/060000d8 a899 - 49 - bf - a965 - 0576 dee958d4/how - -获得活跃application?forum=exceldev