#c# #vsto #office-interop #office-addins
#c# #vsto #office-взаимодействие #office-дополнения
Вопрос:
Я использую Visual Studio и разрабатываю надстройку Office. Мне нужно определить одинаковые фигуры и картинки и заменить их.
Я пытаюсь использовать OpenXML для этого, но, похоже, его невозможно изменить в используемых файлах. Похоже, что это не работает как надстройка office, потому что она не работает с файлами, которые уже открыты.
И я много часов искал в Интернете, но не нашел способа сделать это. Помогите мне, пожалуйста.
Спасибо
Ответ №1:
OpenXML TL; DR: и надстройки Office (включая VSTO) являются конкурирующими технологиями для разных вариантов использования, которые могут привести к проблемам во время выполнения, если их объединить. Лучше всего придерживаться только одного.
Я… разработка надстройки office. Мне нужно определить одинаковые фигуры и картинки и заменить их. Я пытаюсь использовать
OpenXml
для этого, но, похоже, его невозможно изменить в используемых файлах.
OpenXML — это API для создания / чтения / изменения документов Office (точнее, Office 2010 ), которые соответствуют современному формату документа XML, такому как Word 2010. Это достигается путем манипулирования документом непосредственно на уровне файла, а не с помощью COM. На самом деле для этого вообще не требуется устанавливать Word на компьютер! Это делает OpenXML довольно легким подходом к взаимодействию с документами Office.
К сожалению, OpenXML (или другие подходы, основанные на файлах) не подходят для офисных надстроек (VSTO или других), если оба нацелены на один и тот же документ. Это потому, что документ уже загружен, скажем, в Word, а в Word размещена ваша надстройка. Любая попытка изменить базовый файл (включая OpenXML с помощью чего угодно, кроме Word или API Word), который представляет загруженный документ, столкнется с:
нарушение общего доступа
Другими словами:
- Для запуска надстройки Office сначала должно быть запущено приложение Office. Это называется хостингом
- Операции с документами Office, управляемые вашей надстройкой, требуют, чтобы документ сначала был загружен в приложение Office
- Ни один внешний процесс Windows или операция в процессе (надстройка) не может напрямую изменить базовый файл документа Office, пока он открыт в приложении Office. (Надстройки могут косвенно сохранять в файл с помощью API Office и запрашивать приложение Office для сохранения, хотя обычно такие API не предоставляют вызывающему абоненту никаких интерфейсов файлов raw, поэтому более поздний вариант, вероятно, не одно и то же)
Что делать?
Я рекомендую либо:
a) используйте чистый подход OpenXML и откажитесь от надстройки Office или …
б) используйте чистый подход Office add-in (VSTO) и откажитесь от кода OpenXML
Учитывая, что, похоже, у вас уже есть код для фигур и картинок с помощью подхода OpenXML, возможно, вариант a) является лучшим.
Смотрите также
Комментарии:
1. Спасибо, если я использую подход Office add-ins, и как мне идентифицировать одинаковые объекты изображения и заменить их?
2. @RollingDeap24Vz2425 Учитывая, что, похоже, у вас уже есть код для фигур и картинок с помощью подхода OpenXML, возможно, вариант
a)
является лучшим.3. Спасибо, но я все еще хочу знать, как использовать надстройки Office для этого? Есть ли какой-нибудь способ получить необработанные данные?
4. @RollingDeap24Vz2425 Спасибо за согласие. если вам нужны «необработанные данные» , то решение на основе файлов, вероятно, является лучшим подходом. Я бы не рекомендовал это, хотя предпочитаю VSTO. Вот старая статья social.msdn.microsoft.com/Forums/vstudio/en-US /. … Также посмотрите это . Не забудьте проголосовать, если вы чувствуете, что это так, поскольку это помогает накормить детей 😉