2016-08-17 1 views
0

Ich entwickle ein Word-Addin, bei dem ein Benutzer einige vordefinierte Vorlagen (docx) auswählen kann, die aus SharePoint geladen werden. Über einen Assistenten werden die Inhaltssteuerelemente im Dokument festgelegt. Soweit eine sehr gute Erfahrung.Header wird nicht angezeigt, wenn ich ein Dokument einfüge

Ich habe jedoch ein Problem beim Laden einer Docx-Datei mit Kopfzeilen.

Ich bin mit dieser Funktion die docx-Datei laden: (vollständigen Code unten)

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

das funktioniert, aber manchmal ist die Header des Quelldokumentes nicht vorhanden ist. Oder andere Male sind sie auf allen Seiten, während die erste Seite anders sein sollte.

Frage: Sollte das Einfügen eines Dokuments mit Kopf- und Fußzeilen funktionieren und mache ich etwas falsch?

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(); 
    })); 
} 

*** bearbeiten Ich sehe dies ist in einer neuen Version kommen: https://github.com/OfficeDev/office-js-docs/blob/WordJs_1.3_Openspec/word/resources/application.md

Was ist der Unterschied mit dem, was ich tue?

+0

Fügen Sie die Kopf-/Fußzeilen korrekt ein, wenn Sie zu Word.InsertLocation.replace wechseln? Ich vermute, Word fügt die Kopf-/Fußzeile nicht ein, wenn vorhandener Inhalt vorhanden ist. –

+0

Es tut mir leid, wenn meine Frage nicht klar war, aber ich füge eine docx-Datei in das Dokument ein. Die Quelldatei hat keinen Header auf der ersten Seite, aber nach dem Einfügen hat sie eine Kopfzeile auf der ersten Seite. Es ist also nicht dasselbe wie die Quelle. Ich habe ein Problem, das die Header löscht, aber diese haben in meinem Fall für jetzt einen Workaround. –

Antwort

1

Das ist ein Design-Verhalten, wenn Sie eine Datei mit der Methode insertFileFromBase64 einfügen ersetzen wir weder die Kopf-/Fußzeilen noch die customXMLParts des Dokuments (dort gibt es möglicherweise bereits Kopf- und Fußzeilen, dasselbe für XMLParts).

Also, wenn Sie die Kopf- und Fußzeilen aktualisieren müssen Sie tun, nachdem Sie die Datei einfügen. (mit der API können Sie die 3 Arten von Headern einfügen, die in Wort für jeden Abschnitt, erste Seite, gerade, ungerade Seiten unterstützt werden)

Hoffe, dass dies hilft. Danke! Juan.

+0

Dies hilft, obwohl ein bisschen unerwartet –

Verwandte Themen