如何报告Office.js / Word javascript API中的错误?
错误是当尝试通过range.insertOoxml(...)或context.document.body.insertOoxml(...)插入类似锚的书签时,api表示成功,但结果文档确实没有书签。唯一的解决方法是在段落后面添加一个附加段落。不幸的是,这会在身体中引入额外的换行符,从而破坏体验。
基本上,这会无声地失败......
<w:body>
<w:p>
<w:bookmarkStart w:id="0" w:name="bookmarkAnchor"/>
<w:bookmarkEnd w:id="0"/>
</w:p>
</w:body>
......但这很有效......
<w:body>
<w:p>
<w:bookmarkStart w:id="0" w:name="bookmarkAnchor"/>
<w:bookmarkEnd w:id="0"/>
</w:p>
<w:p/> <--- this is a miserable workaround!
</w:body>
我很高兴上传一些显示问题的测试代码。
答案 0 :(得分:1)
感谢您发送此问题。 这里有3个问题:
首先,您的示例中描述的XML是在WordProcessingML中,而不是OOXML。 insertOoxml method预计会收到完整的Office Open XML。
那就是说...我发现你的样本有一个稍微不同的OOXML表示,它没有添加新段落就可以工作,见下面的示例。
您为什么使用书签?从开发人员的角度来看,使用它们超级不可靠,我强烈建议您使用内容控件。最终用户可以轻松破解书签。
好的,首先这里是我正在使用的标记:
<?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="00000000" w:rsidRDefault="005C4C17">
<w:bookmarkStart w:id="0" w:name="MyBookmark"/>
<w:r>
<w:t>provides</w:t>
</w:r>
<w:bookmarkEnd w:id="0"/>
</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>
&#13;
这是代码:
function insertOOXMLwithBookmark() {
Word.run(function (context) {
var myOOXML = "<?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='00000000' w:rsidRDefault='005C4C17'> <w:bookmarkStart w:id='0' w:name='MyBookmark'/> <w:r> <w:t>provides</w:t> </w:r> <w:bookmarkEnd w:id='0'/> </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>";
context.document.getSelection().insertOoxml(myOOXML, "replace");
return context.sync();
&#13;
示例代码只是替换当前选择或将其添加到插入点(基本上是一个范围),但当然您可以在支持范围的任何对象中重用这个完全相同的方法 如果这对您有用并且编码愉快,请告诉我们。
顺便说一下,我写了一篇关于此的文章,你可能会发现它很有用: http://dev.office.com/docs/add-ins/word/create-better-add-ins-for-word-with-office-open-xml