Skip to content

Commit

Permalink
Add DateAxis for category axis.
Browse files Browse the repository at this point in the history
  • Loading branch information
Shiyu Tang committed Apr 8, 2018
1 parent e00a750 commit 3379964
Show file tree
Hide file tree
Showing 6 changed files with 241 additions and 17 deletions.
5 changes: 5 additions & 0 deletions .gitignore
Expand Up @@ -15,13 +15,16 @@ x64/
[Oo]bj/
Lib/
packages/
# Visual Studio 2015 cache/options directory
.vs/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
Expand All @@ -48,9 +51,11 @@ packages/
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db

# Visual Studio profiler
*.psess
Expand Down
2 changes: 2 additions & 0 deletions main/SS/UserModel/Charts/ChartAxisFactory.cs
Expand Up @@ -31,6 +31,8 @@ public interface IChartAxisFactory
IValueAxis CreateValueAxis(AxisPosition pos);

IChartAxis CreateCategoryAxis(AxisPosition pos);

IChartAxis CreateDateAxis(AxisPosition pos);
}

}
1 change: 1 addition & 0 deletions ooxml/NPOI.OOXML.csproj
Expand Up @@ -164,6 +164,7 @@
<SubType>Code</SubType>
</Compile>
<Compile Include="XSSF\UserModel\Charts\XSSFChartUtil.cs" />
<Compile Include="XSSF\UserModel\Charts\XSSFDateAxis.cs" />
<Compile Include="XSSF\UserModel\Charts\XSSFLineChartData.cs" />
<Compile Include="XSSF\UserModel\Charts\XSSFManualLayout.cs">
<SubType>Code</SubType>
Expand Down
110 changes: 94 additions & 16 deletions ooxml/OpenXmlFormats/Drawing/Chart/Chart.cs
Expand Up @@ -4218,7 +4218,7 @@ public class CT_DateAx

private CT_UnsignedInt crossAxField;

private object itemField;
//private object itemField;

private CT_Boolean autoField;

Expand Down Expand Up @@ -4275,8 +4275,8 @@ public static CT_DateAx Parse(XmlNode node, XmlNamespaceManager namespaceManager
ctObj.txPr = CT_TextBody.Parse(childNode, namespaceManager);
else if (childNode.LocalName == "crossAx")
ctObj.crossAx = CT_UnsignedInt.Parse(childNode, namespaceManager);
else if (childNode.LocalName == "Item")
ctObj.Item = new Object();
else if (childNode.LocalName == "crosses")
ctObj.crosses = CT_Crosses.Parse(childNode, namespaceManager);
else if (childNode.LocalName == "auto")
ctObj.auto = CT_Boolean.Parse(childNode, namespaceManager);
else if (childNode.LocalName == "lblOffset")
Expand Down Expand Up @@ -4331,8 +4331,8 @@ internal void Write(StreamWriter sw, string nodeName)
this.txPr.Write(sw, "txPr");
if (this.crossAx != null)
this.crossAx.Write(sw, "crossAx");
if (this.Item != null)
sw.Write("<Item/>");
if (this.crosses != null)
this.crosses.Write(sw, "crosses");
if (this.auto != null)
this.auto.Write(sw, "auto");
if (this.lblOffset != null)
Expand Down Expand Up @@ -4540,18 +4540,20 @@ public CT_UnsignedInt crossAx
}
}

[XmlElement("crosses", typeof(CT_Crosses), Order = 14)]
[XmlElement("crossesAt", typeof(CT_Double), Order = 14)]
public object Item
CT_Double crossesAtField;
[XmlElement(Order = 14)]
public CT_Double crossesAt
{
get
{
return this.itemField;
}
set
{
this.itemField = value;
}
get { return this.crossesAtField; }
set { this.crossesAtField = value; }
}

CT_Crosses crossesField;
[XmlElement(Order = 14)]
public CT_Crosses crosses
{
get { return this.crossesField; }
set { this.crossesField = value; }
}

[XmlElement(Order = 15)]
Expand Down Expand Up @@ -4657,6 +4659,71 @@ public List<CT_Extension> extLst
this.extLstField = value;
}
}

public CT_NumFmt AddNewNumFmt()
{
this.numFmtField = new CT_NumFmt();
return numFmtField;
}

public bool IsSetNumFmt()
{
return this.numFmtField != null;
}

public CT_UnsignedInt AddNewAxId()
{
this.axIdField = new CT_UnsignedInt();
return this.axIdField;
}

public CT_AxPos AddNewAxPos()
{
this.axPosField = new CT_AxPos();
return this.axPosField;
}

public CT_Scaling AddNewScaling()
{
this.scalingField = new CT_Scaling();
return this.scalingField;
}

public CT_Crosses AddNewCrosses()
{
this.crossesField = new CT_Crosses();
return this.crossesField;
}

public CT_UnsignedInt AddNewCrossAx()
{
this.crossAxField = new CT_UnsignedInt();
return this.crossAxField;
}

public CT_TickLblPos AddNewTickLblPos()
{
this.tickLblPosField = new CT_TickLblPos();
return this.tickLblPosField;
}

public CT_Boolean AddNewDelete()
{
this.deleteField = new CT_Boolean();
return this.deleteField;
}

public CT_TickMark AddNewMajorTickMark()
{
this.majorTickMarkField = new CT_TickMark();
return this.majorTickMarkField;
}

public CT_TickMark AddNewMinorTickMark()
{
this.minorTickMarkField = new CT_TickMark();
return this.minorTickMarkField;
}
}


Expand Down Expand Up @@ -10499,6 +10566,17 @@ public CT_CatAx AddNewCatAx()
this.catAxField.Add(newax);
return newax;
}

public CT_DateAx AddNewDateAx()
{
CT_DateAx newax = new CT_DateAx();
if (this.dateAxField == null)
{
this.dateAxField = new List<CT_DateAx>();
}
this.dateAxField.Add(newax);
return newax;
}
}


Expand Down
124 changes: 124 additions & 0 deletions ooxml/XSSF/UserModel/Charts/XSSFDateAxis.cs
@@ -0,0 +1,124 @@
using NPOI.OpenXmlFormats.Dml.Chart;
using NPOI.SS.UserModel.Charts;
using System;
using System.Collections.Generic;
using System.Text;

namespace NPOI.XSSF.UserModel.Charts
{
public class XSSFDateAxis : XSSFChartAxis
{
private CT_DateAx ctDateAx;

public XSSFDateAxis(XSSFChart chart, long id, AxisPosition pos)
: base(chart)
{

createAxis(id, pos);
}

public XSSFDateAxis(XSSFChart chart, CT_DateAx ctDateAx)
: base(chart)
{

this.ctDateAx = ctDateAx;
}

public override long Id
{
get
{
return ctDateAx.axId.val;
}
}

public CT_ShapeProperties Line
{
get
{
return ctDateAx.spPr;
}
}

protected override CT_AxPos GetCTAxPos()
{
return ctDateAx.axPos;
}

protected override CT_NumFmt GetCTNumFmt()
{
if (ctDateAx.IsSetNumFmt())
{
return ctDateAx.numFmt;
}
return ctDateAx.AddNewNumFmt();
}

protected override CT_Scaling GetCTScaling()
{
return ctDateAx.scaling;
}

protected override CT_Crosses GetCTCrosses()
{
return ctDateAx.crosses;
}

protected override CT_Boolean GetDelete()
{
return ctDateAx.delete;
}

protected override CT_TickMark GetMajorCTTickMark()
{
return ctDateAx.majorTickMark;
}

protected override CT_TickMark GetMinorCTTickMark()
{
return ctDateAx.minorTickMark;
}

protected CT_ChartLines GetMajorGridLines()
{
return ctDateAx.majorGridlines;
}

public override void CrossAxis(IChartAxis axis)
{
ctDateAx.crossAx.val = (uint)axis.Id;
}

public CT_TimeUnit GetBaseTimeUnit()
{
return ctDateAx.baseTimeUnit;
}

public void SetBaseTimeUnit(CT_TimeUnit unit)
{
ctDateAx.baseTimeUnit = unit;
}

private void createAxis(long id, AxisPosition pos)
{
ctDateAx = chart.GetCTChart().plotArea.AddNewDateAx();
ctDateAx.AddNewAxId().val = (uint)id;
ctDateAx.AddNewAxPos();
ctDateAx.AddNewScaling();
ctDateAx.AddNewCrosses();
ctDateAx.AddNewCrossAx();
ctDateAx.AddNewTickLblPos().val = ST_TickLblPos.nextTo;
ctDateAx.AddNewDelete();
ctDateAx.AddNewMajorTickMark();
ctDateAx.AddNewMinorTickMark();


this.Position = (pos);
this.Orientation = (AxisOrientation.MinToMax);
this.Crosses = (AxisCrosses.AutoZero);
this.IsVisible = true;
this.MajorTickMark = (AxisTickMark.Cross);
this.MinorTickMark = (AxisTickMark.None);
}
}
}
16 changes: 15 additions & 1 deletion ooxml/XSSF/UserModel/XSSFChart.cs
Expand Up @@ -211,6 +211,21 @@ public IChartAxis CreateCategoryAxis(AxisPosition pos)
axis.Add(categoryAxis);
return categoryAxis;
}

public IChartAxis CreateDateAxis(AxisPosition pos)
{
long id = axis.Count + 1;
XSSFDateAxis dateAxis = new XSSFDateAxis(this, id, pos);
if (axis.Count == 1)
{
IChartAxis ax = axis[0];
ax.CrossAxis(dateAxis);
dateAxis.CrossAxis(ax);
}
axis.Add(dateAxis);
return dateAxis;
}

public List<IChartAxis> GetAxis()
{
if (axis.Count == 0 && HasAxis())
Expand Down Expand Up @@ -312,7 +327,6 @@ private void ParseValueAxis()
axis.Add(new XSSFValueAxis(this, valAx));
}
}

}
}

Expand Down

0 comments on commit 3379964

Please sign in to comment.