【问题标题】:Need to modify innerxml of a paragraph using openxml 2.5需要使用openxml 2.5修改段落的innerxml
【发布时间】:2017-10-23 16:02:11
【问题描述】:

我正在尝试修改 word 文档段落的 innerxml,但 innerxml 属性拒绝设置。以下是我尝试过的代码:

static void Main(string[] args)
{
    string destinationWordFile = @"C:\Users\Testing\Modified Files\1216085_01012013.docx";
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(destinationWordFile, true, new OpenSettings { AutoSave = true }))
    {
        OpenXmlWdProcessing.RunProperties rp = new OpenXmlWdProcessing.RunProperties();
        MainDocumentPart mainPart = wordDoc.MainDocumentPart;
        var invoiceDocument = wordDoc.MainDocumentPart.Document;
        var po = (from body in invoiceDocument.Body
                               where body.InnerText.Contains("PO:")
                               select body).FirstOrDefault();
        string poInnerXml = po.InnerXml;
        string modifiedXML = poInnerXml.Remove(poInnerXml.IndexOf("w:w=\""), 10);
        po.InnerXml.Remove(0);
        po.InnerXml.Insert(0,modifiedXML);
        mainPart.Document.Save();
    }

以下是我要定位的 XML:

<w:pPr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:pStyle w:val="Normal" />
    <w:framePr w:w="516" w:x="6881" w:y="7175" />
    <w:widowControl w:val="off" />
    <w:autoSpaceDE w:val="off" />
    <w:autoSpaceDN w:val="off" />
    <w:spacing w:before="0" w:after="0" w:line="179" w:lineRule="exact" />
    <w:ind w:left="0" w:right="0" w:first-line="0" />
    <w:jc w:val="left" />
    <w:rPr>
        <w:rFonts w:ascii="AATWWN+Helvetica" />
        <w:color w:val="000000" />
        <w:sz w:val="16" />
    </w:rPr>
</w:pPr>
<w:r xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:rPr>
        <w:rFonts w:ascii="AATWWN+Helvetica" />
        <w:color w:val="000000" />
        <w:sz w:val="16" />
    </w:rPr>
    <w:t>PO:                             111111111111</w:t>
</w:r>

我想从&lt;w:framePr w:w="516" w:x="6881" w:y="7175" /&gt; 中删除w:w="516"。 有人可以给我建议吗?非常感谢。

【问题讨论】:

  • 您是要设置内部文本还是删除宽度属性?还是你都在尝试?请说清楚。
  • Varun Rathore:我正在尝试删除 width 属性。

标签: c# c#-4.0 openxml openxml-sdk


【解决方案1】:

维普尔,

这是我已经修改的一段代码,用于向您解释如何删除 width 属性。

//Get all paragraphs in the document
IEnumerable<Paragraph> paragraphs = doc.MainDocumentPart.Document.Body.OfType<Paragraph>();
foreach (Paragraph paragraph in paragraphs)
{
    FrameProperties framePr = paragraph.OfType<FrameProperties>().FirstOrDefault();
    framePr.Width = null;
}

您可以在类似的行中更改您的代码。 将属性值设置为 null 应该可以,我没有尝试过。如果您遇到任何问题,请告诉我。

【讨论】:

    【解决方案2】:

    使用此代码删除 FrameProperties 属性。

    //paragraph is the Paragraph object that needs to be processed.
    
    FrameProperties frameProperties = pTag.Descendants<FrameProperties>().FirstOrDefault();
    if (frameProperties != null)
    {
        frameProperties.Width = null; //give string value if you want to set one say "516"
        // To set/remove height attribute use this.
        frameProperties.Height = null;
        //To Remove frame properties itself from paragraph
        frameProperties.Remove();
    }
    

    并最终使用此代码保存包。

    //package is the object of WordProcessingDocument
    package.MainDocumentPart.Document.Save();
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-05
      • 2016-12-23
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多