Добавление поля слияния с использованием JavaScript API
Я хочу вставить поле слияния (<<xyz>>
) из API JavaScript в листе слов. Но я не могу найти JavaScript API для надстройки Office Word.
2 ответа
Решение
<?xml version=\"1.0\" standalone=\"yes\"?> <?mso-application progid=\"Word.Document\"?><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\"><w:body> <w:p w:rsidR=\"002715FD\" w:rsidRDefault=\"002715FD\"><w:fldSimple w:instr=\" MERGEFIELD "Last_Name" \"><w:r><w:rPr><w:noProof /></w:rPr><w:t>«Last_Name»</w:t></w:r></w:fldSimple></w:p><w:sectPr w:rsidR=\"00000000\"> <w:pgSz w:w=\"12240\" w:h=\"15840\"/><w:pgMar w:top=\"1440\" w:right=\"1440\" w:bottom=\"1440\" w:left=\"1440\" w:header=\"720\" w:footer=\"720\" w:gutter=\"0\"/><w:cols w:space=\"720\"/></w:sectPr> </w:body> </w:document> </pkg:xmlData></pkg:part></pkg:package>
Выше XML для поля слияния
Word.run(function (context) {
// Queue a command to get the current selection and then
// create a proxy range object with the results.
var range = context.document.getSelection();
// Queue a commmand to insert OOXML in to the beginning of the range.
range.insertOoxml("PASTE ABOVE MERGE XML", Word.InsertLocation.start);
// Synchronize the document state by executing the queued commands,
// and return a promise to indicate task completion.
return context.sync().then(function () {
console.log('OOXML added to the beginning of the range.');
});
})
.catch(function (error) {
console.log('Error: ' +JSON.stringify(error));
if (error instanceof OfficeExtension.Error) {
console.log('Debug info: ' + JSON.stringify(error.debugInfo));
}
});
Мне пришлось создать надстройку tskpane для слова, используя angular и офисный js API, чтобы вставить поля слияния в текст и прямоугольник фигур, используя ooxml
XML-шаблон поля слияния текста для вставки в слово
<?mso-application progid="Word.Document"?> <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xml:space="preserve" w:embeddedObjPresent="no"> <w:body> <w:p> <w:fldSimple w:instr=" MERGEFIELD "${variableName}" "> <w:r> <w:rPr> <w:noProof /> </w:rPr> <w:t>«${variableName}»</w:t> </w:r> </w:fldSimple> </w:p> </w:body> </w:wordDocument>
xml шаблон для формы / прямоугольника с полем слияния
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xml:space="preserve" w:embeddedObjPresent="no">
<w:body>
<w:p xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0">
<w:r>
<w:pict>
<v:rect style="position:absolute;margin-left:0pt;margin-top:0pt;width:344pt;height:193.5pt;color:white;z-index:251659264;visibility:visible;mso-wrap-style:square;mso-width-percent:0;mso-height-percent:0;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;mso-width-percent:0;mso-height-percent:0;mso-width-relative:margin;mso-height-relative:margin;v-text-anchor:middle" fillcolor="#4472c4 [3204]" strokecolor="#1f3763 [1604]" strokeweight="1pt">
<v:textbox>
<w:txbxContent>
<w:p>
<w:pPr>
<w:jc w:val="center" />
</w:pPr>
<w:fldSimple w:instr=" MERGEFIELD Image:${variableName} ">
<w:r>
<w:rPr>
<w:noProof />
</w:rPr>
<w:t>«Image:${variableName}»</w:t>
</w:r>
</w:fldSimple>
</w:p>
</w:txbxContent>
</v:textbox>
</v:rect>
</w:pict>
</w:r>
</w:p>
</w:body>
</w:wordDocument>
ooxml метод вставки
async insertMergeFieldOnDocument(xml: string) { return Word.run(async (context) => { let cursorOrSelection = context.document.getSelection(); context.load(cursorOrSelection); await context.sync(); cursorOrSelection.insertOoxml(xml, Word.InsertLocation.replace); await context.sync(); }); }