2009-08-12 2 views
1

У меня есть проект, который добавляет функциональность Microsoft Word с помощью пакета расширения XML. В настоящее время, когда открывается документ, который мы предоставляем клиенту, он загружает наш пакет, который выполняет метод SmartDocInitialize, который добавляет вещи в главное меню и панель инструментов с помощью Microsoft.Office.Core.CommandBar.Controls.Add и т. П. Без изменений, когда они открываются в Word 2007, эти кнопки добавляются на вкладке «Надстройки», но это не идеально, поскольку кнопки все маленькие, не сгруппированы должным образом, и нет возможности добавить вкладку надстроек в когда документ загружен.Программно добавив ленту к Microsoft Word 2007

Я хотел был бы сохранить эту функциональность так же, если документ открыт в Office 2003, но если документ открывается в Office 2007, я хотел бы прочитать в XML-файле, который описывает мою новую вкладку Ribbon, и все кнопки. Все, что мне удалось найти в Интернете, казалось, привело к тому, что файл ленты был загружен только в том случае, если у вас очень специфическая комбинация магии (встроена в Visual Studio, и она работает, но нет никакой информации о том, как вы могли бы развернуть ее для пользователей) и будет работать только в том случае, если у вас есть весь проект, созданный первоначально с помощью инструментов Visual Studio для свойств Office, которых у меня сейчас нет.

Наша среда разработки XP, Visual Studio 2005, C#, .NET 2.0

ответ

2

The Ribbon UI просто не так programatic как старый CommandBars UI. Я не думаю, что ты можешь делать то, что хочешь. Насколько я знаю, единственный способ программно изменить интерфейс Ribbon UI состоит в том, чтобы надстройка (COM) реализовала интерфейс IRibbonEextensibility и вернула собственный XML-файл (с определением ленты) из метода GetCustomUI. Невозможно добавить или удалить кнопки по одному, как вы могли, с помощью интерфейса CommandBars. Это совсем другое. Я не думаю, что вы можете делать то, что хотите, от некоторых макросов в документе.

Я не знаком с пакетами расширения XML, но если вам нужно установить их на ПК пользователя, возможно, вы также можете установить надстройку, которая могла бы загрузить соответствующий XML-ленту для вас.

+0

Все, что я видел для надстроек COM, говорит, что они загружены приложением, а не для каждого документа. К сожалению, я не могу справиться с этим. Я понял, как добавить ленту на основе каждого документа, но таким образом функция onAction, похоже, должна быть макросом VBA, и мне сложно определить, как заставить мой макрос VBA звонить мои обработчики событий в C#. Если вы что-то знаете об этом, добавьте ответ на этот вопрос: http://stackoverflow.com/questions/1288717/is-it-possible-to-call-c-dlls-from-visual-basic-code-contained -in-a-word-2007-fi –

+0

Мое предположение: вам нужно, чтобы классы .NET, видимые каким-то образом, VBA (который является базами COM) могли видеть и работать с ними. Тем не менее, это вне моего опыта. –

+0

Я нашел это. Только для информации. https://social.msdn.microsoft.com/Форумы/office/en-US/ddf4a3fe-16af-440d-9697-9a3bf53b52c3/customize-microsoft-word-2007-in-cnet-windows-application-using-microsoftofficeinteropword? forum = worddev Невозможно, я думаю. .. –

0

Это не так сложно, как кажется.

Если у вас уже есть свои ленточные кнопки, подключенные к некоторым макросам VBA в документе, вам просто нужно добавить ссылку в свой проект VBA в свою коллективную сборку .net.

..........................................................................................

Google «VBA .net вызываемым»

его не сложно, класс пометить как ком видимого, объявим его с ProgID атрибутом, делают методы общественных местах, убедитесь, что ваши методы возвращают простые типы, а также использовать Regasm в регистрации сборку на целевой машине (не требуется в dev-блоке).

Смежные вопросы