В большинстве случаев ответ отрицательный, но есть проблеск да.
Относительно вашего конкретного вопроса об управлении PackagePart
s из их потоков.Возможно, вы могли бы сделать это с помощью какой-нибудь утилиты «распаковать», а затем, зная структуру OPC, перейти к тому, что вам нужно в Part
s, и изменить вещи с помощью XSLT или других технологий манипуляции XML - но вы не сможетеСделайте это на ActiveDocument
, потому что его поток уже используется по своей природе.Вы можете использовать VBA, чтобы создать его копию и манипулировать ею действительно громоздким способом, и когда ваша манипуляция будет завершена, закройте VBA и удалите текущий ActiveDocument
и откройте ваш манипулируемый как новый ActiveDocument
.
С другой стороны, есть способ манипулировать WordprocessingML для текущего ActiveDocument
из VBA, но это будет невероятно сложно сделать.Имейте открытый документ, выберите что-то и затем к VBE.Затем запустите это:
Sub InjectXML()
Dim wd As Document: Set wd = ActiveDocument
Debug.Print wd.Range.WordOpenXML
End Sub
Вы увидите все выпадающие WordprocessingML в ближайшем окне.На самом деле это «плоский OPC WordprocessingML», так как все это поддерживается в одной строке XML.Используя ActiveDocument.Range.InsertXML
, вы можете технически вставить плоский OPC-тип WordprocessingML обратно в документ в выбранном месте. Вот пример того, кто использует C # для этого через interop и Linq-to-XML.Сделать это в VBA было бы невероятно сложно.
Итак, опять же, ответ в основном «нет», но немного «да».