11

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

但是,实际上获取当前的 Workbook 对象被证明是相当烦人的,我正在使用 ExcelDNA 添加功能,但是,我似乎无法将我的函数传递给有效的 Workbook COM 对象。

4

4 回答 4

17

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

(Workbook)Globals.ThisAddIn.Application.ActiveWorkbook;

[来源]

于 2011-10-27T13:46:38.067 回答
16

这是我目前正在做的方式,它似乎工作得很好

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

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

希望这可以帮助

于 2011-10-27T14:15:30.007 回答
11

正如@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;
于 2014-08-30T20:42:11.563 回答
0

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

于 2017-02-18T19:05:56.150 回答