Вставка содержимого ooxml при привязке вызывает проблемы со стилем для последнего абзаца

#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 части, оставив только первый абзац, и вставьте содержимое в определенную привязку, единственный оставшийся абзац больше не будет стилизован. У вас есть какие-нибудь мысли по этому поводу?