ContentControl.insertOoxml добавляет дополнительные абзацы - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь добавить в документ Word новый элемент управления содержимым с таблицей внутри. У меня есть Ooxml таблицы, и я вставляю его в новый элемент управления содержимым с insertOoxml. Но он добавляет новый абзац перед таблицей и еще один после нее, как показано на следующем рисунке.

Table with extra paragraphs

Это мой код:

Word.run(function (context) {
     var range = context.document.getSelection();
     var myContentControl = range.insertContentControl();
     myContentControl.title = "ZZZ";
     myContentControl.insertOoxml(dataXml, 'end');
     myContentControl.cannotEdit = false;
     myContentControl.cannotDelete = false;
     context.load(myContentControl, 'id, title, tag');
     return context.sync().then(function () {
          console.log("Success");
     });
});

Это основная часть содержимого dataXml:

<?mso-application progid="Word.Document"?>
<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
  <!-- ... -->
  <pkg:part pkg:name="/word/document.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml">
    <pkg:xmlData>
      <w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://purl.oclc.org/ooxml/officeDocument/relationships" xmlns:m="http://purl.oclc.org/ooxml/officeDocument/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://purl.oclc.org/ooxml/drawingml/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://purl.oclc.org/ooxml/wordprocessingml/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 wp14" w:conformance="strict">
        <w:body>
          <w:tbl>
            <w:tblPr>
              <w:tblStyle w:val="table" />
              <w:tblW w:w="95.25pt" w:type="dxa" />
              <w:tblInd w:w="0.8pt" w:type="dxa" />
              <w:tblCellMar>
                <w:top w:w="0pt" w:type="dxa" />
                <w:start w:w="0pt" w:type="dxa" />
                <w:bottom w:w="0pt" w:type="dxa" />
                <w:end w:w="0pt" w:type="dxa" />
              </w:tblCellMar>
              <w:tblLook w:firstColumn="1" w:firstRow="1" w:lastColumn="1" w:lastRow="1" w:noVBand="1" />
            </w:tblPr>
            <w:tblGrid>
              <w:gridCol w:w="952" />
              <w:gridCol w:w="953" />
            </w:tblGrid>
            <w:tr>
              <w:tblPrEx>
                <w:tblW w:w="95.25pt" w:type="dxa" />
                <w:tblInd w:w="0.8pt" w:type="dxa" />
                <w:tblCellMar>
                  <w:top w:w="0pt" w:type="dxa" />
                  <w:start w:w="0pt" w:type="dxa" />
                  <w:bottom w:w="0pt" w:type="dxa" />
                  <w:end w:w="0pt" w:type="dxa" />
                </w:tblCellMar>
                <w:tblLook w:firstColumn="1" w:firstRow="1" w:lastColumn="1" w:lastRow="1" w:noVBand="1" />
              </w:tblPrEx>
              <w:trPr>
                <w:trHeight w:hRule="exact" w:val="288" />
              </w:trPr>
              <w:tc>
                <w:tcPr>
                  <w:tcW w:w="48.75pt" w:type="dxa" />
                  <w:tcBorders>
                    <w:top w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                    <w:start w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                    <w:bottom w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                    <w:end w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                  </w:tcBorders>
                  <w:shd w:val="clear" w:color="auto" w:fill="FFFFFF" />
                  <w:noWrap />
                  <w:tcMar>
                    <w:top w:w="0.4pt" w:type="dxa" />
                    <w:start w:w="0.4pt" w:type="dxa" />
                    <w:bottom w:w="0.4pt" w:type="dxa" />
                    <w:end w:w="0.4pt" w:type="dxa" />
                  </w:tcMar>
                  <w:vAlign w:val="bottom" />
                  <w:hideMark />
                </w:tcPr>
                <w:p>
                  <w:pPr>
                    <w:rPr>
                      <w:rFonts w:ascii="Calibri" w:eastAsia="Calibri" w:hAnsi="Calibri" w:cs="Calibri" />
                      <w:b w:val="0" />
                      <w:bCs w:val="0" />
                      <w:i w:val="0" />
                      <w:iCs w:val="0" />
                      <w:smallCaps w:val="0" />
                      <w:color w:val="000000" />
                      <w:sz w:val="22" />
                      <w:szCs w:val="22" />
                    </w:rPr>
                  </w:pPr>
                  <w:r>
                    <w:rPr>
                      <w:rFonts w:ascii="Calibri" w:eastAsia="Calibri" w:hAnsi="Calibri" w:cs="Calibri" />
                      <w:b w:val="0" />
                      <w:bCs w:val="0" />
                      <w:i w:val="0" />
                      <w:iCs w:val="0" />
                      <w:smallCaps w:val="0" />
                      <w:color w:val="000000" />
                      <w:sz w:val="22" />
                      <w:szCs w:val="22" />
                    </w:rPr>
                    <w:t>A</w:t>
                  </w:r>
                </w:p>
              </w:tc>
              <w:tc>
                <w:tcPr>
                  <w:tcW w:w="48.75pt" w:type="dxa" />
                  <w:tcBorders>
                    <w:top w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                    <w:start w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                    <w:bottom w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                    <w:end w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                  </w:tcBorders>
                  <w:shd w:val="clear" w:color="auto" w:fill="FFFFFF" />
                  <w:noWrap />
                  <w:tcMar>
                    <w:top w:w="0.4pt" w:type="dxa" />
                    <w:start w:w="0.4pt" w:type="dxa" />
                    <w:bottom w:w="0.4pt" w:type="dxa" />
                    <w:end w:w="0.4pt" w:type="dxa" />
                  </w:tcMar>
                  <w:vAlign w:val="bottom" />
                  <w:hideMark />
                </w:tcPr>
                <w:p>
                  <w:pPr>
                    <w:rPr>
                      <w:rFonts w:ascii="Calibri" w:eastAsia="Calibri" w:hAnsi="Calibri" w:cs="Calibri" />
                      <w:b w:val="0" />
                      <w:bCs w:val="0" />
                      <w:i w:val="0" />
                      <w:iCs w:val="0" />
                      <w:smallCaps w:val="0" />
                      <w:color w:val="000000" />
                      <w:sz w:val="22" />
                      <w:szCs w:val="22" />
                    </w:rPr>
                  </w:pPr>
                  <w:r>
                    <w:rPr>
                      <w:rFonts w:ascii="Calibri" w:eastAsia="Calibri" w:hAnsi="Calibri" w:cs="Calibri" />
                      <w:b w:val="0" />
                      <w:bCs w:val="0" />
                      <w:i w:val="0" />
                      <w:iCs w:val="0" />
                      <w:smallCaps w:val="0" />
                      <w:color w:val="000000" />
                      <w:sz w:val="22" />
                      <w:szCs w:val="22" />
                    </w:rPr>
                    <w:t>B</w:t>
                  </w:r>
                </w:p>
              </w:tc>
            </w:tr>
            <w:tr>
              <w:tblPrEx>
                <w:tblW w:w="95.25pt" w:type="dxa" />
                <w:tblInd w:w="0.8pt" w:type="dxa" />
                <w:tblCellMar>
                  <w:top w:w="0pt" w:type="dxa" />
                  <w:start w:w="0pt" w:type="dxa" />
                  <w:bottom w:w="0pt" w:type="dxa" />
                  <w:end w:w="0pt" w:type="dxa" />
                </w:tblCellMar>
                <w:tblLook w:firstColumn="1" w:firstRow="1" w:lastColumn="1" w:lastRow="1" w:noVBand="1" />
              </w:tblPrEx>
              <w:trPr>
                <w:trHeight w:hRule="exact" w:val="288" />
              </w:trPr>
              <w:tc>
                <w:tcPr>
                  <w:tcW w:w="48.75pt" w:type="dxa" />
                  <w:tcBorders>
                    <w:top w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                    <w:start w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                    <w:bottom w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                    <w:end w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                  </w:tcBorders>
                  <w:shd w:val="clear" w:color="auto" w:fill="FFFFFF" />
                  <w:noWrap />
                  <w:tcMar>
                    <w:top w:w="0.4pt" w:type="dxa" />
                    <w:start w:w="0.4pt" w:type="dxa" />
                    <w:bottom w:w="0.4pt" w:type="dxa" />
                    <w:end w:w="0.4pt" w:type="dxa" />
                  </w:tcMar>
                  <w:vAlign w:val="bottom" />
                  <w:hideMark />
                </w:tcPr>
                <w:p>
                  <w:pPr>
                    <w:rPr>
                      <w:rFonts w:ascii="Calibri" w:eastAsia="Calibri" w:hAnsi="Calibri" w:cs="Calibri" />
                      <w:b w:val="0" />
                      <w:bCs w:val="0" />
                      <w:i w:val="0" />
                      <w:iCs w:val="0" />
                      <w:smallCaps w:val="0" />
                      <w:color w:val="000000" />
                      <w:sz w:val="22" />
                      <w:szCs w:val="22" />
                    </w:rPr>
                  </w:pPr>
                  <w:r>
                    <w:rPr>
                      <w:rFonts w:ascii="Calibri" w:eastAsia="Calibri" w:hAnsi="Calibri" w:cs="Calibri" />
                      <w:b w:val="0" />
                      <w:bCs w:val="0" />
                      <w:i w:val="0" />
                      <w:iCs w:val="0" />
                      <w:smallCaps w:val="0" />
                      <w:color w:val="000000" />
                      <w:sz w:val="22" />
                      <w:szCs w:val="22" />
                    </w:rPr>
                    <w:t>C</w:t>
                  </w:r>
                </w:p>
              </w:tc>
              <w:tc>
                <w:tcPr>
                  <w:tcW w:w="48.75pt" w:type="dxa" />
                  <w:tcBorders>
                    <w:top w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                    <w:start w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                    <w:bottom w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                    <w:end w:val="single" w:sz="6" w:space="0" w:color="B6B6B6" />
                  </w:tcBorders>
                  <w:shd w:val="clear" w:color="auto" w:fill="FFFFFF" />
                  <w:noWrap />
                  <w:tcMar>
                    <w:top w:w="0.4pt" w:type="dxa" />
                    <w:start w:w="0.4pt" w:type="dxa" />
                    <w:bottom w:w="0.4pt" w:type="dxa" />
                    <w:end w:w="0.4pt" w:type="dxa" />
                  </w:tcMar>
                  <w:vAlign w:val="bottom" />
                  <w:hideMark />
                </w:tcPr>
                <w:p>
                  <w:pPr>
                    <w:rPr>
                      <w:rFonts w:ascii="Calibri" w:eastAsia="Calibri" w:hAnsi="Calibri" w:cs="Calibri" />
                      <w:b w:val="0" />
                      <w:bCs w:val="0" />
                      <w:i w:val="0" />
                      <w:iCs w:val="0" />
                      <w:smallCaps w:val="0" />
                      <w:color w:val="000000" />
                      <w:sz w:val="22" />
                      <w:szCs w:val="22" />
                    </w:rPr>
                  </w:pPr>
                  <w:r>
                    <w:rPr>
                      <w:rFonts w:ascii="Calibri" w:eastAsia="Calibri" w:hAnsi="Calibri" w:cs="Calibri" />
                      <w:b w:val="0" />
                      <w:bCs w:val="0" />
                      <w:i w:val="0" />
                      <w:iCs w:val="0" />
                      <w:smallCaps w:val="0" />
                      <w:color w:val="000000" />
                      <w:sz w:val="22" />
                      <w:szCs w:val="22" />
                    </w:rPr>
                    <w:t>D</w:t>
                  </w:r>
                </w:p>
              </w:tc>
            </w:tr>
          </w:tbl>
          <w:p />
          <w:sectPr>
            <w:pgMar w:header="708" w:footer="708" />
            <w:cols w:space="708" />
          </w:sectPr>
        </w:body>
      </w:document>
    </pkg:xmlData>
  </pkg:part>
  <!-- ... -->
</pkg:package>

Мне удастся удалить первый дополнительный абзац с этим кодом:

var paragraphs = myContentControl.paragraphs;
context.load(paragraphs, 'items');
return context.sync().then(function () {
    paragraphs.items[0].delete();
    return context.sync().then(function () {
        console.log("Success");
    });
});

Но если япопробуйте удалить последний абзац, как показано в следующей строке, он удаляет элемент управления содержимым и не удаляет дополнительный абзац.

paragraphs.items[paragraphs.items.length - 1].delete();

Как удалить последний лишний абзац, используя Office.js и не удаляяконтроль содержимого?

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Во всех «современных» версиях Word (modern = версии, которые поддерживают перенос текста / свободное размещение таблиц на странице) требуется абзац после таблицы.

Метка абзаца видна в WordОткройте XML в вопросе:

</w:tbl>
<w:p />
<w:sectPr>

Поэтому удалить этот абзац будет невозможно.

Тем не менее, его можно будет отформатировать с очень маленьким размером шрифта (какНапомню, Word поддерживает .5 pt как минимальный размер) без пробелов до или пробелов после.

Фон для почему необходим знак абзаца: Word хранит информацию о размещениитаблица на странице, а также некоторая другая структурная информация «в» абзаце. Мы этого не видим, но это то, что происходит "под одеялом". Очень похоже на якорь объекта Shape.

0 голосов
/ 04 октября 2019

Я нашел этот обходной путь: вставьте непосредственно в выбор документа строку Ooxml, содержащую также элемент управления содержимым и таблицу без абзацев внутри него.

Итак, это код:

Word.run(function (context) {
    context.document.getSelection().insertOoxml(dataXml, 'Start');
    return context.sync().then(function () {
        console.log("Success");
    });
});

Это основная часть dataXml содержимого:

<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
  <!-- ... -->
  <pkg:xmlData>
      <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
        <w:body>
          <w:sdt>
            <w:sdtPr>
              <w:alias w:val="ZZZ"/>
              <w:id w:val="0"/>
            </w:sdtPr>
            <w:sdtEndPr/>
            <w:sdtContent>
              <w:tbl>
                <!-- ... TABLE CONTENT ... -->
              </w:tbl>
            </w:sdtContent>
          </w:sdt>
        </w:body>
      </w:document>
    </pkg:xmlData>
  </pkg:part>
</pkg:package>

И вот результат:

Final result

Впо крайней мере, последний абзац находится вне контроля содержимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...