2010-12-28 17 views
0

Ribbon wird erstellt, wenn ich das WordProcessingDocument aus dem Pfad einer Docx-Datei öffne. Es wird jedoch nicht erstellt, wenn ich dasselbe aus dem Byte-Inhalt der docx-Datei öffne. Die unten zeigt nicht das Band in der docx-Datei auf: -Ribbon wird nicht erstellt, wenn WordprocessingDocument aus Byte erstellt wird []

public void AddRibbonToTemplate(byte[] templateContent) 
     { 
       string sanitizedRibbonXml = GetRibbonXML().ToString().Replace("xmlns=\"\"", ""); 
       MemoryStream stream = new MemoryStream(); 
       stream.Write(templateContent, 0, templateContent.Length); 
       using (WordprocessingDocument myDoc = WordprocessingDocument.Open(stream, true)) 
       { 
        MainDocumentPart mainPart = myDoc.MainDocumentPart; 

        if (myDoc.GetPartsCountOfType<RibbonExtensibilityPart>() > 0) 
         myDoc.DeletePart(myDoc.GetPartsOfType<RibbonExtensibilityPart>().First()); 

        RibbonExtensibilityPart ribbonExtensibilityPart = myDoc.AddNewPart<RibbonExtensibilityPart>(); 
        ribbonExtensibilityPart.CustomUI = new DocumentFormat.OpenXml.Office.CustomUI.CustomUI(sanitizedRibbonXml); 
        myDoc.CreateRelationshipToPart(ribbonExtensibilityPart); 

       } 
       stream.Close(); 
     } 

Die folgende Abbildung zeigt die Band: -

public void AddRibbonToTemplate(string documentFileName) 
     { 
      string sanitizedRibbonXml = GetRibbonXML().ToString().Replace("xmlns=\"\"", ""); 
      using (WordprocessingDocument myDoc = WordprocessingDocument.Open(documentFileName, true)) 
      { 
       MainDocumentPart mainPart = myDoc.MainDocumentPart; 

       if (myDoc.GetPartsCountOfType<RibbonExtensibilityPart>() > 0) 
        myDoc.DeletePart(myDoc.GetPartsOfType<RibbonExtensibilityPart>().First()); 

       RibbonExtensibilityPart ribbonExtensibilityPart = myDoc.AddNewPart<RibbonExtensibilityPart>(); 
       ribbonExtensibilityPart.CustomUI = new DocumentFormat.OpenXml.Office.CustomUI.CustomUI(sanitizedRibbonXml); 
       myDoc.CreateRelationshipToPart(ribbonExtensibilityPart); 
      } 
     } 

GetRibbonXml() erhält die XML des Bandes. Ich entferne die xmlns = "", die im Ribbon-Element hinzugefügt wird (aus Frage here).

Kann jemand eine Idee werfen, warum das Band nicht hinzugefügt wird. Selbst der customUI-Ordner wird nicht in der zip-Datei des Worts hinzugefügt. Könnte jemand helfen.

Antwort

0

Ich hätte den Stream überprüft, indem ich das gleiche in eine Datei geschrieben habe. Folgendes ist der Code: -

public void AddRibbonToTemplate(byte[] templateContent) 
     { 
       string sanitizedRibbonXml = GetRibbonXML().ToString().Replace("xmlns=\"\"", ""); 
       using (MemoryStream stream = new MemoryStream()) 
       { 
        stream.Write(templateContent, 0, (int)templateContent.Length); 
        using (WordprocessingDocument myDoc = WordprocessingDocument.Open(stream, true)) 
        { 
         MainDocumentPart mainPart = myDoc.MainDocumentPart; 

         if (myDoc.GetPartsCountOfType<RibbonExtensibilityPart>() > 0) 
          myDoc.DeletePart(myDoc.GetPartsOfType<RibbonExtensibilityPart>().First()); 

         RibbonExtensibilityPart ribbonExtensibilityPart = myDoc.AddNewPart<RibbonExtensibilityPart>(); 
         ribbonExtensibilityPart.CustomUI = new DocumentFormat.OpenXml.Office.CustomUI.CustomUI(sanitizedRibbonXml); 
         myDoc.CreateRelationshipToPart(ribbonExtensibilityPart); 

        } 
        using (FileStream fileStream = new FileStream("Test20.docx", 
        System.IO.FileMode.CreateNew)) 
        { 
         stream.WriteTo(fileStream); 
        } 


       } 

     }