#ms-word #office-interop #com-interop
#ms-word #office-interop #com-взаимодействие
Вопрос:
Как следует из названия, у меня есть .Сетевое приложение, которое использует interop для открытия документов в Word. Я установил
app.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable
перед открытием документа. Согласно документации, это «Отключает все макросы во всех файлах, открытых программно, без отображения каких-либо предупреждений системы безопасности»
Однако, когда я пытаюсь открыть один конкретный документ, я получаю на экране диалоговое окно с надписью «не удалось загрузить объект, поскольку он недоступен на этом компьютере». Это документ клиента, но я полагаю, что он содержит макрос со ссылками на COM-объект, который у меня не установлен.
Я делаю что-то глупое? есть ли какой-либо способ фактически отключить макросы при открытии документа Word?
Комментарии:
1. Энди, если на вопрос получен ответ, не могли бы вы, пожалуйста, пометить его как таковой?
2. @Cindy Мне жаль, но это было давно, и я больше не работаю над этим проектом. Обычно я отношусь к тому типу людей, которые разместили бы решение здесь, если бы оно у меня работало, но я, честно говоря, не могу вспомнить.
3. Под вопросом, на который вы отреагировали, размещен ответ. Я узнал об этом из-за аналогичного вопроса, который был задан на прошлой неделе. Было бы неплохо иметь возможность использовать это как «подтвержденный» дубликат, поскольку он содержит так много полезной информации как в Q, так и в A, поэтому я и спросил…
4. Да, согласен, это полезная тема. К сожалению, у меня нет доступа к коду, над которым я работал, и ссылка в ответе не работает 🙁
Ответ №1:
Попробуйте:
WordBasic.Отключите автоматический макрос 1
Как ни странно, это основано на возврате к временам, предшествующим VBA, но по-прежнему кажется наиболее надежным способом гарантировать, что никакие автоматические макросы не запускаются (в любом документе — вы можете включить его обратно, используя параметр «0»).
Недавно у меня был проект, в котором мне пришлось обработать 6000 шаблонов Word (да, шаблонов, а не документов), многие из которых содержали странные элементы, такие как макросы и т.д. Я смог обработать все, кроме 6, используя эту технику. (Я так и не выяснил, в чем проблема с этими 6).
РЕДАКТИРОВАТЬ: обсуждение того, как вызвать это из C #, см.: http://www.dotnet247.com/247reference/msgs/56/281785.aspx
Комментарии:
1. Спасибо, у вас есть какие-нибудь идеи, как я могу вызвать это из C #?
Ответ №2:
Для c # вы можете использовать
(_wordApp.WordBasic as dynamic).DisableAutoMacros();
Весь код, который я использую, является:
using Word = Microsoft.Office.Interop.Word;
private Word.Application _wordApp;
...
_wordApp = new Word.Application
{
Visible = false,
ScreenUpdating = false,
DisplayAlerts = Word.WdAlertLevel.wdAlertsNone,
FileValidation = MsoFileValidationMode.msoFileValidationSkip
};
_wordApp.Application.AutomationSecurity = MsoAutomationSecurity.msoAutomationSecurityForceDisable;
(_wordApp.WordBasic as dynamic).DisableAutoMacros();
Комментарии:
1. Вы можете просмотреть эту статью о старом WordBasic learn.microsoft.com/ru-ru/office/vba/api /…