获取C#中的当前工作簿对象

我一直在用C#编写一个应用程序,它在Excel电子表格中创build自定义文档属性,我有一个函数用于接收工作簿对象…

但是,实际上得到当前的工作簿对象被certificate是相当恼人的,我使用ExcelDNA来添加function,但是,我似乎无法通过我的函数有效的工作簿COM对象。

这是我目前的做法,似乎工作得很好

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 

然后,我会尝试你有什么,看看它是如何工作的

希望这可以帮助

如果您需要使用C#查找activeworkbook,如果您使用的是Office Interop,则可以尝试这种types的代码:

 (Workbook)Globals.ThisAddIn.Application.ActiveWorkbook; 

[ 来源 ]

正如@Govert在他的评论中所解释的那样:

 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-49bf-a965-0576dee958d4/how-to-get-active-application?forum=exceldev