javascript – 如何使用officejs api在MS Word中重新加载页眉和页脚
作者:互联网
我使用此方法从BE收到ooxml格式的文档(BE中的xml包含整个文档,包含页眉和页脚(如果存在)):
public someGetMethod(templateId: string): ng.IPromise<Template[]> {
return this.Service.getXml(templateId)
.then((myBodyXML: string) => {
return Word.run((...args) => {
const context = args[0];
const body = context.document.body;
body.insertOoxml(myBodyXML, Word.InsertLocation.replace);
return context.sync();
})
.catch((error: Error) => {
console.error('Error: ' + JSON.stringify(error));
});
});
}
这很好用.
当我选择其他文档并使用此方法再次加载时问题就开始了,因为页眉和页脚不会更改,只会更改文档正文.
是的,这是正常的,因为我使用body.insertOoxml()并且根据the documentation,主体不包含页眉和页脚(但它们是如何以及为什么第一次加载而不是第二次重新加载?).
在我选择下一个要加载的模板之前,我试图以这种方式获取页眉和页脚并清理它或加载空文本或ooxml:
const mySections = context.document.sections;
context.load(mySections);
return context.sync().then(() => {
myHeader = mySections.items[0].getHeader('primary');
myHeader.insertOoxml(myBodyXML, Word.InsertLocation.replace);
// or
myHeader.clear();
// or
myHeader.insertText('', Word.InsertLocation.replace);
return context.sync();
});
但结果是一样的.
总而言之,任何人都可以回答如何在没有重新加载整个文档的痛苦的情况下重新加载?
解决方法:
感谢您提出问题,请为此添加更多详细信息.拥有您的Office的内部版本号将有很大帮助,感谢您在Github中提供它.我知道你是一个只支持Word.js 1.1需求集的Word版本,因此在新版本中代码可以更简单,现在请耐心等待.如果您可以添加指向您正在插入的OOXML有效负载的链接,那么在这种情况下也非常有用,如果您可以添加这些详细信息将有助于我们更有效地帮助您.
话虽如此,解决方案的方法是有3个OOXML片段:一个用于文档正文,另一个用于标题正文,另一个用于页脚正文,你分别执行3个操作.
以下是一些可以阐明API行为的事实,解释了为什么需要采用这种方法并可能指导您正确的方向.
>首先,body.insertOoxml()的设计不会替换文档中现有的页眉/页脚,对于body.insertFileFromBase64()方法也是如此.该操作仅影响文档的正文.换句话说,根据设计,如果要插入的OOXML包含页眉和页脚定义,为了保护当前文档,它们将被忽略而不会覆盖现有文档.这是一个证明这一事实的script lab sample(以及学习如何使用脚本实验室的btw go here).查看我正在插入的OOXML标记,它包含页眉和页脚定义,并且在调用document.body.insertOoxml()后它们不会插入到文档中
>页眉和页脚被认为是单独的主体元素(实际上在文件格式中是单独的文档,称为“子文档”).因此,要在那里插入OOXML,每个都需要单独的OOXML片段,看起来像
mySections.items[0].getHeader("primary").insertOoxml(ooXmlHeader, "replace");
return context.sync()
>最后清除页眉和页脚我认为你正在遵循正确的方法,只需确保遍历文档中的所有部分,here is a script lab sample显示如何执行此操作.
我希望这很有用.
标签:javascript,ms-word,ms-office,office-js 来源: https://codeday.me/bug/20190705/1388557.html