关于 ms word: 插入文档时没有显示页眉

Header not showing up when I'm inserting a document

我正在开发一个 Word 插件,用户可以在其中选择一些从 SharePoint 加载的预定义模板 (docx) 文档。用户通过向导设置文档中的内容控件。到目前为止,体验非常好。

但是,我在加载带有标题的 docx 文件时遇到了问题。

我正在使用这个函数来加载 docx 文件:(下面的完整代码)

1
body.insertFileFromBase64(templateDoc.base64String, Word.InsertLocation.end);

这可行,但有时源文档的标题不存在。或者其他时候它们在所有页面上,而第一页应该不同。

问题:
是否应该插入带有页眉和页脚的文档?我做错了什么吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
private applyTemplate(template: Template): void {
if (!Office.context.requirements.isSetSupported("WordApi", 1.2)) {
    this.errorMessage = 'Deze versie van Word wordt niet ondersteund';
    this.showError = true;
    return;
}

let calls: [
    ng.IPromise<TemplateFile>
] = [
        this.appService.getTemplateDocument(template.templateId)
    ];

this.q.all(calls)
    .then((results: any[]) => {
        let templateDoc: TemplateFile = results[0].data;

        Word.run((context) => {
            let body = context.document.body;
            let sections = context.document.sections;
            context.load(sections, 'body/style');
            body.clear();
            return context.sync()
                .then(() => {
                    sections.items[0].getHeader(Word.HeaderFooterType.primary).clear();
                    sections.items[0].getFooter(Word.HeaderFooterType.primary).clear();

                    return context.sync()
                        .then(() => {
                            body.insertFileFromBase64(templateDoc.base64String, Word.InsertLocation.end);
                            this.appService.setTemplateSelected(template);                                      
                            return context.sync()
                                .then(() => {
                                    this.go('/customers');
                                    this.scope.$apply();
                                }, ((result: OfficeErrorMessage) => {
                                    this.setErrorState(result);
                                }));
                        }, ((result: OfficeErrorMessage) => {
                            this.setErrorState(result);
                        }));
                }, ((result: OfficeErrorMessage) => {
                    this.setErrorState(result);
                }));
        });
    }, ((result: ng.IHttpPromiseCallbackArg<ErrorMessage>) => {
        this.errorMessage = result.data.exceptionMessage;
        this.showError = true;
        this.scope.$apply();
    }));
}

***编辑
我看到这是一个新版本:
https://github.com/OfficeDev/office-js-docs/blob/WordJs_1.3_Openspec/word/resources/application.md

和我做的有什么区别?


这是设计行为,当您使用 insertFileFromBase64 方法插入文件时,我们不会替换文档的页眉/页脚和 customXMLParts(那里可能已经有页眉和页脚,对于 XMLParts 也是如此)。

因此,如果您需要更新页眉和页脚,则必须在插入文件后进行。 (使用 api,您可以为每个部分、第一页、偶数页、奇数页插入 word 中支持的 3 种类型的标题)

希望这会有所帮助。
谢谢!
胡安。