Получить текущий объект Workbook в C # - PullRequest
10 голосов
/ 27 октября 2011

Я пишу приложение на C #, которое создает пользовательские свойства документа в электронной таблице Excel, у меня есть функция для этого, которая принимает объект рабочей книги ...

Однако фактическое получение текущего объекта Workbook оказывается довольно раздражающим, я использую ExcelDNA для добавления функциональности, однако я не могу передать свою функцию действительным COM-объектом Workbook.

Ответы [ 4 ]

16 голосов
/ 27 октября 2011

Если вам нужно найти активную рабочую книгу с C#, если вы используете Office Interop, вы можете попробовать такой код:

(Workbook)Globals.ThisAddIn.Application.ActiveWorkbook;

[ Источник ]

15 голосов
/ 27 октября 2011

Это то, как я сейчас это делаю, кажется, что оно работает очень хорошо

 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

Тогда я попробую то, что у вас есть, и увижукак это работает

Надеюсь, это поможет

8 голосов
/ 31 августа 2014

Как @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;
0 голосов
/ 18 февраля 2017

GetActiveObject () ищет в таблице запущенных объектов (ROT) и выдает последний открытый экземпляр Excel, который может не соответствовать окну Excel с верхним порядком.

Прокрутите Z-порядок и найдите соответствующую книгу.

Смотрите эту ссылку: - https://social.msdn.microsoft.com/Forums/office/en-US/060000d8-a899-49bf-a965-0576dee958d4/how-to-get-active-application?forum=exceldev

...