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

时间:2011-10-27 13:39:32

标签: c# excel excel-dna

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

然而,实际上获取当前的Workbook对象是非常烦人的,我使用ExcelDNA来添加功能,但是,我似乎无法将我的函数传递给有效的Workbook COM对象。

4 个答案:

答案 0 :(得分:15)

如果您需要使用C#查找活动工作簿,如果您使用的是Office Interop,则可以尝试以下类型的代码:

(Workbook)Globals.ThisAddIn.Application.ActiveWorkbook;

[Source]

答案 1 :(得分:15)

这是我目前正在做的事情似乎工作得很好

 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

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

希望这有帮助

答案 2 :(得分:8)

正如@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;

答案 3 :(得分:0)

GetActiveObject()在运行对象表(ROT)中查找,并为您提供最后打开的Excel实例,该实例可能与顶部Z order excel窗口不对应。

遍历Z顺序并找到匹配的工作簿。

看到这个链接: - https://social.msdn.microsoft.com/Forums/office/en-US/060000d8-a899-49bf-a965-0576dee958d4/how-to-get-active-application?forum=exceldev