Browse Source

parse AlternativeContent under CT_Run

fix #769
replace_system_drawing
Tony Qu 3 years ago
parent
commit
408ec5aaa9
  1. 7
      OpenXmlFormats/Drawing/SpreadsheetDrawing.cs
  2. 43
      OpenXmlFormats/Vml/CT_AlternateContent.cs
  3. 36
      OpenXmlFormats/Vml/SpreadsheetDrawing.cs
  4. 24
      OpenXmlFormats/Wordprocessing/Run.cs

7
OpenXmlFormats/Drawing/SpreadsheetDrawing.cs

@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using NPOI.OpenXml4Net.Util;
using NPOI.OpenXmlFormats.Vml;
namespace NPOI.OpenXmlFormats.Dml.Spreadsheet
{
@ -1448,8 +1449,8 @@ namespace NPOI.OpenXmlFormats.Dml.Spreadsheet
get { return fromField; }
set { fromField = value; }
}
Vml.Spreadsheet.CT_AlternateContent alternateContentField = null;
public Vml.Spreadsheet.CT_AlternateContent alternateContent
CT_AlternateContent alternateContentField = null;
public CT_AlternateContent alternateContent
{
get
{
@ -1562,7 +1563,7 @@ namespace NPOI.OpenXmlFormats.Dml.Spreadsheet
}
else if (childNode.LocalName == "AlternateContent")
{
oneCellAnchor.alternateContent = Vml.Spreadsheet.CT_AlternateContent.Parse(childNode, namespaceManager);
oneCellAnchor.alternateContent = CT_AlternateContent.Parse(childNode, namespaceManager);
}
else if (childNode.LocalName == "clientData")
{

43
OpenXmlFormats/Vml/CT_AlternateContent.cs

@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
namespace NPOI.OpenXmlFormats.Vml
{
public class CT_AlternateContent
{
public string InnerXml { get; set; }
public CT_AlternateContent()
{
}
public static CT_AlternateContent Parse(XmlNode node, XmlNamespaceManager namespaceManager)
{
if (node == null)
return null;
var ac = new CT_AlternateContent();
if (string.IsNullOrEmpty(node.InnerXml))
{
return ac;
}
ac.InnerXml = node.InnerXml;
return ac;
}
internal void Write(StreamWriter sw, string nodeName)
{
sw.Write(string.Format("<mc:{0} xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"", nodeName));
if (this.InnerXml == null)
{
sw.Write(string.Format("/>", nodeName));
}
else
{
sw.Write(">");
sw.Write(this.InnerXml);
sw.Write(string.Format("</mc:{0}>", nodeName));
}
}
}
}

36
OpenXmlFormats/Vml/SpreadsheetDrawing.cs

@ -9,42 +9,6 @@ using NPOI.OpenXml4Net.Util;
namespace NPOI.OpenXmlFormats.Vml.Spreadsheet
{
public class CT_AlternateContent
{
public string innerXml { get; set; }
public CT_AlternateContent()
{
}
public static CT_AlternateContent Parse(XmlNode node, XmlNamespaceManager namespaceManager)
{
if (node == null)
return null;
var ac = new CT_AlternateContent();
if (string.IsNullOrEmpty(node.InnerXml))
{
return ac;
}
ac.innerXml = node.InnerXml;
return ac;
}
internal void Write(StreamWriter sw, string nodeName)
{
sw.Write(string.Format("<mc:{0} xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"", nodeName));
if (this.innerXml == null)
{
sw.Write(string.Format("/>", nodeName));
}
else
{
sw.Write(">");
sw.Write(this.innerXml);
sw.Write(string.Format("</mc:{0}>", nodeName));
}
}
}
[System.ComponentModel.DesignerCategory("code")]
public class CT_ClientData
{

24
OpenXmlFormats/Wordprocessing/Run.cs

@ -30,6 +30,8 @@ namespace NPOI.OpenXmlFormats.Wordprocessing
private byte[] rsidDelField;
private byte[] rsidRField;
Vml.CT_AlternateContent alternateContentField = null;
public CT_R()
{
@ -50,6 +52,17 @@ namespace NPOI.OpenXmlFormats.Wordprocessing
this.rPrField = value;
}
}
public Vml.CT_AlternateContent alternateContent
{
get
{
return alternateContentField;
}
set
{
this.alternateContentField = value;
}
}
[XmlElement("annotationRef", typeof(CT_Empty), Order = 1)]
[XmlElement("br", typeof(CT_Br), Order = 1)]
@ -373,6 +386,7 @@ namespace NPOI.OpenXmlFormats.Wordprocessing
ctObj.rsidRPr = XmlHelper.ReadBytes(node.Attributes["w:rsidRPr"]);
ctObj.rsidDel = XmlHelper.ReadBytes(node.Attributes["w:rsidDel"]);
ctObj.rsidR = XmlHelper.ReadBytes(node.Attributes["w:rsidR"]);
foreach (XmlNode childNode in node.ChildNodes)
{
if (childNode.LocalName == "rPr")
@ -442,6 +456,10 @@ namespace NPOI.OpenXmlFormats.Wordprocessing
ctObj.Items.Add(CT_Drawing.Parse(childNode, namespaceManager));
ctObj.ItemsElementName.Add(RunItemsChoiceType.drawing);
}
else if (childNode.LocalName == "AlternateContent")
{
ctObj.alternateContent = Vml.CT_AlternateContent.Parse(childNode, namespaceManager);
}
else if (childNode.LocalName == "endnoteRef")
{
ctObj.Items.Add(new CT_Empty());
@ -551,6 +569,8 @@ namespace NPOI.OpenXmlFormats.Wordprocessing
if (this.rPr != null)
this.rPr.Write(sw, "rPr");
int i = 0;
foreach (object o in this.Items)
{
if ((o is CT_Text) && this.ItemsElementName[i] == RunItemsChoiceType.instrText)
@ -619,6 +639,10 @@ namespace NPOI.OpenXmlFormats.Wordprocessing
sw.Write("<w:yearShort/>");
i++;
}
if (this.alternateContent != null)
{
this.alternateContent.Write(sw, "AlternateContent");
}
sw.Write(string.Format("</w:{0}>", nodeName));
}

Loading…
Cancel
Save