Получить текущий объект книги в C#
Я пишу приложение на C#, который создает пользовательские свойства документа в электронной таблице Excel, у меня есть функция для этого, которая принимает объект книги...
однако на самом деле получение текущего объекта книги оказывается довольно раздражающим, я использую ExcelDNA для добавления функциональности, однако я не могу передать свою функцию допустимому com-объекту книги.
4 ответов
это то, как я сейчас это делаю, кажется, работает очень хорошо
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
тогда я бы попробовал то, что у вас есть, и посмотреть, как это работает
надеюсь, что это помогает
Если вам нужно найти activeworkbook с C#
, Если вы используете Office Interop, вы можете попробовать такой код:
(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, который может не соответствовать верхнему окну excel Z order.
цикл через порядок Z и найти соответствующую книгу.
см. эту ссылку: - https://social.msdn.microsoft.com/Forums/office/en-US/060000d8-a899-49bf-a965-0576dee958d4/how-to-get-active-application?forum=exceldev