2010-12-28 2 views
0

docxファイルのパスからWordProcessingDocumentを開くと、リボンが作成されます。しかし、それは私がdocxファイルのバイト内容から同じを開くと作成されません。リボンWordProcessingDocumentがバイト[]から作成されたときにリボンが作成されない

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

以下を示しています - - :

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()リボンのXMLを取得する以下のdocxファイル内のリボンを表示されません。私はリボン要素(質問hereから)に追加されるxmlns = ""を削除しています。

誰かがリボンが追加されない理由をいくつか考えてもらえますか? customUIフォルダでさえ、zipファイルという単語には追加されません。誰でも助けてくれますか?

答えて

0

ストリームをファイルに書き込むことでストリームを検証する必要があります。コードは次のとおりです。 -

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


       } 

     } 
関連する問題