OfficeJS Word Addin - изменение управления контентом во всем документе (включая верхний и нижний колонтитулы)
Из-за ограничений офисного API ( API ограничен только элементами управления содержимым расширенного текста). Нам пришлось вставить элементы управления содержимым как объект OOXML. Он правильно вставил элемент управления контентом, но офисный API не распознает его как элемент управления контентом. Например, при использовании офисного API, если вы вызываете метод для получения всех элементов управления контентом, вышеуказанный элемент управления контентом не возвращается.
Если вы запустите следующий код, он не вернет те элементы управления контентом, которые были вставлены таким образом.
// Run a batch operation against the Word object model.
Word.run(function (context) {
// Create a proxy object for the content controls collection.
var contentControls = context.document.contentControls;
}
Вот OOXML:
<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
<pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="512">
<pkg:xmlData>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml" />
</Relationships>
</pkg:xmlData>
</pkg:part>
<pkg:part pkg:name="/word/document.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml">
<pkg:xmlData>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml">
<w:body>
<w:sdt>
<w:sdtPr>
<w:alias w:val="[REPLACE_THIS]" />
<w:id w:val="1382295294" />
<w:placeholder>
<w:docPart w:val="4D926923E99F45DBAF2203E4FEA73047" />
</w:placeholder>
<w:dataBinding w:xpath="[REPLACE_THIS]" w:storeItemID="{AFE97E21-6B3F-435F-8566-BD38F346ABE4}" />
<w:showingPlcHdr />
</w:sdtPr>
<w:sdtContent>
<w:p>
<w:r>
<w:t>[REPLACE_THIS]</w:t>
</w:r>
</w:p>
</w:sdtContent>
</w:sdt>
</w:body>
</w:document>
</pkg:xmlData>
</pkg:part>
</pkg:package>
В Office API нет встроенных методов для получения этих элементов управления содержимым и их изменения. Я должен прочитать каждый раздел документа, получить OOXML, изменить его и вставить обратно. Есть ли другой способ сделать это? Так как это действительно громоздкий и подверженный ошибкам процесс.
1 ответ
Я предполагаю, что вы используете OOXML для вставки других типов элементов управления контентом (например, простой текст, комбо, дата и т. Д.), И если это так, то да, в коллекции элементов управления контентом мы не поддерживаем, на данный момент, другие типы элементов управления контентом, кроме форматированного текста. В основном это связано с ограничением в Word Online, которое поддерживает только расширенный текст на сегодняшний день, и мы поставляем API, которые могут гарантировать многоплатформенное поведение. План состоит в том, что когда он в конечном итоге поддерживает другие типы, они будут включены как часть коллекции (отсюда и свойство типа). так что да, пока ваш единственный выход - это получить OOXML и обрабатывать другие типы управления через XML. Вы, вероятно, можете настроить таргетинг на OOXML, который вы получите, если оберните их с помощью элемента управления содержимым расширенного текста и получите только OOXML из элементов управления содержимым оболочки.