0

docxファイルのパスからWordProcessingDocumentを開くと、リボンが作成されます。ただし、docxファイルのバイトコンテンツから同じものを開いても作成されません。以下は、docxファイルにリボンを表示しません:-

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を取得します。リボン要素に追加されたxmlns=""を削除します(ここの質問から)。

リボンが追加されない理由を誰かが考えてみてください。customUIフォルダーでさえwordzipファイルに追加されません。誰か助けてもらえますか。

4

1 に答える 1

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


                }

         }
于 2010-12-28T07:59:17.407 に答える