#javascript #ms-word #office-js #openxml #office-addins
Вопрос:
При использовании setDataAsync()
метода, предназначенного для привязки в документе Word и заполнения его содержимым ooxml, стиль не применяется к заключительному абзацу вставляемого xml-содержимого. Для справки, документ Word полностью пуст в месте привязки и вставки.
document.xml
Часть элемента управления содержимым выглядит следующим образом:
<pkg:xmlData>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:pa="https://precisely.cloud/kisoji-report-generator" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" >
<w:body>
<w:sdt>
<w:sdtPr>
<w:alias w:val="myContentControl"/>
<w:id w:val="00"/>
<w15:appearance w15:val="hidden"/>k
<w:showingPlcHdr/>
</w:sdtPr>
<w:sdtContent>
<w:p>
<w:r>
<w:t>Some placeholder text</w:t>
</w:r>
</w:p>
</w:sdtContent>
</w:sdt>
</w:body>
</w:document>
</pkg:xmlData>
и document.xml
часть вставляемого содержимого выглядит так:
<pkg:xmlData>
<w:document xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:pa="https://precisely.cloud/kisoji-report-generator">
<w:body>
<w:p>
<w:pPr>
<w:pStyle w:val="SectionHeading" />
<w:jc w:val="center" />
<w:spacing w:after="180" />
</w:pPr>
<w:r>
<w:t xml:space="preserve">First paragraph text</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val="SectionHeading" />
<w:jc w:val="center" />
<w:spacing w:after="180" />
</w:pPr>
<w:r>
<w:t xml:space="preserve">Second paragraph text</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
</pkg:xmlData>
Соответствующая styles.xml
часть вставляемого содержимого:
<pkg:xmlData>
<w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:style w:type="paragraph" w:default="1" w:styleId="Normal">
<w:name w:val="Normal" />
<w:qFormat />
</w:style>
<w:style w:type="paragraph" w:customStyle="1" w:styleId="SectionParagraph">
<w:name w:val="SectionParagraph" />
<w:basedOn w:val="Normal" />
<w:qFormat />
<w:pPr>
<w:spacing w:after="120" />
</w:pPr>
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" />
<w:color w:val="000000" w:themeColor="text1" />
<w:lang w:val="en-US" />
</w:rPr>
</w:style>
<w:style w:type="paragraph" w:customStyle="1" w:styleId="SectionHeading">
<w:name w:val="SectionHeading" />
<w:basedOn w:val="SectionParagraph" />
<w:qFormat />
<w:rPr>
<w:b />
<w:bCs />
</w:rPr>
</w:style>
</w:styles>
</pkg:xmlData>
Когда вышеуказанное содержимое вставляется в документ Word в привязке, описанной в элементе управления содержимым, стиль применяется только к первому абзацу и опускается для второго. Однако, вставляя дополнительный абзац (например <w:p/>
) в конце xml-содержимого, первые два абзаца оформляются так, как ожидалось. По какой-то причине стиль удаляется для последнего абзаца вставленного содержимого. Я просмотрел документацию OOXML и собственный учебник по надстройкам Microsoft, но нигде, похоже, не объясняется, почему это может происходить.
Почему вставка содержимого в привязку может вызвать проблемы со стилем таким образом?
Комментарии:
1. Что произойдет, если в документе будет только 1 абзац? Он становится стильным? Я подозреваю, что это не так … что может привести, по крайней мере, к потенциальной причине. К последнему абзацу прилагается множество важных элементов для программного обеспечения WindWord.
2. @RichMichaels действительно, если есть только 1 абзац, стиль не применяется. Не могли бы вы подробнее объяснить, почему вы подозреваете, что это может быть?
3. Как я уже сказал, в приложении к последнему абзацу документа программное обеспечение Word добавляет множество элементов управления форматированием документа. Элементы управления разделами и соответствующие им элементы, такие как настройки полей, ориентация страницы, настройки верхнего и нижнего колонтитулов и т.д. Вы можете назвать это ссылкой Слова на другие уровни содержимого документа.
4. Я должен также добавить, что некоторые из этих «битов» связи находятся в последнем абзаце каждого раздела в многосекционных документах. С учетом сказанного, я не знаю, «Почему» ваш XML-код не может задать стиль для этого последнего абзаца, но это должно быть как-то связано с этим особым абзацем и возникающим конфликтом. Еще одним интересным тестом может быть создание многосекционного документа и проверка того, есть ли в вашем коде проблемы в каждом разделе … или это просто последний абзац в документе.
5. Спасибо вам за разъяснения и предложения. Что также интересно, так это то, что та же проблема, с которой я столкнулся, может быть воспроизведена в образце репозитория , на который ссылается
Create Better Add-ins
документация Microsoft. ВSampleContent2.xml
, если вы удалите второй абзац (диаграмму) вdocument.xml
части, оставив только первый абзац, и вставьте содержимое в определенную привязку, единственный оставшийся абзац больше не будет стилизован. У вас есть какие-нибудь мысли по этому поводу?