소스 검색

Charts finally working in Word 2013. Fixes to crashes and axis issue.

Patch provided by Source2702
master
MadBoy_cp 10 년 전
부모
커밋
a9a5b65d0c
2개의 변경된 파일37개의 추가작업 그리고 12개의 파일을 삭제
  1. 35
    10
      DocX/Charts/Chart.cs
  2. 2
    2
      DocX/Properties/AssemblyInfo.cs

+ 35
- 10
DocX/Charts/Chart.cs 파일 보기

@@ -30,8 +30,10 @@ namespace Novacode
get
{
List<Series> series = new List<Series>();
int indx = 1;
foreach (XElement element in ChartXml.Elements(XName.Get("ser", DocX.c.NamespaceName)))
{
element.Add(new XElement(XName.Get("idx", DocX.c.NamespaceName)), (indx++).ToString());
series.Add(new Series(element));
}
return series;
@@ -48,8 +50,16 @@ namespace Novacode
/// </summary>
public void AddSeries(Series series)
{
if (ChartXml.Elements(XName.Get("ser", DocX.c.NamespaceName)).Count() == MaxSeriesCount)
int serCount = ChartXml.Elements(XName.Get("ser", DocX.c.NamespaceName)).Count();
if (serCount == MaxSeriesCount)
throw new InvalidOperationException("Maximum series for this chart is" + MaxSeriesCount.ToString() + "and have exceeded!");
// Sourceman 16.04.2015 - Every Series needs to have an order and index element for being processed by Word 2013
series.Xml.AddFirst(
new XElement(XName.Get("order", DocX.c.NamespaceName),
new XAttribute(XName.Get("val"), (serCount + 1).ToString())));
series.Xml.AddFirst(
new XElement(XName.Get("idx", DocX.c.NamespaceName),
new XAttribute(XName.Get("val"), (serCount + 1).ToString())));
ChartXml.Add(series.Xml);
}
@@ -79,7 +89,9 @@ namespace Novacode
if (Legend != null)
RemoveLegend();
Legend = new ChartLegend(position, overlay);
ChartRootXml.Add(Legend.Xml);
//ChartRootXml.Add(Legend.Xml);
// Sourceman: seems to be necessary to keep track of the order of elements as defined in the schema (Word 2013)
ChartRootXml.Element(XName.Get("plotArea", DocX.c.NamespaceName)).AddAfterSelf(Legend.Xml);
}
/// <summary>
@@ -210,15 +222,23 @@ namespace Novacode
XElement axIDvalXml = XElement.Parse(String.Format(
@"<c:axId val=""{0}"" xmlns:c=""http://schemas.openxmlformats.org/drawingml/2006/chart""/>", ValueAxis.Id));
ChartXml.Add(axIDcatXml);
ChartXml.Add(axIDvalXml);
// Sourceman: seems to be necessary to keep track of the order of elements as defined in the schema (Word 2013)
var insertPoint = ChartXml.Element(XName.Get("gapWidth", DocX.c.NamespaceName));
if (insertPoint != null) {
insertPoint.AddAfterSelf(axIDvalXml);
insertPoint.AddAfterSelf(axIDcatXml);
} else {
ChartXml.Add(axIDcatXml);
ChartXml.Add(axIDvalXml);
}
plotAreaXml.Add(CategoryAxis.Xml);
plotAreaXml.Add(ValueAxis.Xml);
}
ChartRootXml = Xml.Root.Element(XName.Get("chart", DocX.c.NamespaceName));
ChartRootXml.Add(plotAreaXml);
//ChartRootXml.Add(plotAreaXml);
ChartRootXml.Element(XName.Get("autoTitleDeleted", DocX.c.NamespaceName)).AddAfterSelf(plotAreaXml);
}
/// <summary>
@@ -266,7 +286,7 @@ namespace Novacode
new XElement(
XName.Get("srgbClr", DocX.a.NamespaceName),
new XAttribute(XName.Get("val"), value.ToHex()))));
Xml.Add(colorElement);
Xml.Element(XName.Get("tx", DocX.c.NamespaceName)).AddAfterSelf(colorElement);
}
}
@@ -288,6 +308,7 @@ namespace Novacode
XName.Get("tx", DocX.c.NamespaceName),
new XElement(
XName.Get("strRef", DocX.c.NamespaceName),
new XElement(XName.Get("f", DocX.c.NamespaceName), ""),
new XElement(
XName.Get("strCache", DocX.c.NamespaceName),
new XElement(
@@ -298,10 +319,14 @@ namespace Novacode
new XElement(XName.Get("invertIfNegative", DocX.c.NamespaceName), "0"),
new XElement(
XName.Get("cat", DocX.c.NamespaceName),
new XElement(XName.Get("strRef", DocX.c.NamespaceName), strCache)),
new XElement(XName.Get("strRef", DocX.c.NamespaceName),
new XElement(XName.Get("f", DocX.c.NamespaceName), ""),
strCache)),
new XElement(
XName.Get("val", DocX.c.NamespaceName),
new XElement(XName.Get("numRef", DocX.c.NamespaceName), numCache))
new XElement(XName.Get("numRef", DocX.c.NamespaceName),
new XElement(XName.Get("f", DocX.c.NamespaceName), ""),
numCache))
);
}
@@ -314,8 +339,8 @@ namespace Novacode
numCache.RemoveAll();
strCache.Add(ptCount);
numCache.Add(ptCount);
numCache.Add(formatCode);
numCache.Add(ptCount);
Int32 index = 0;
XElement pt;
@@ -343,8 +368,8 @@ namespace Novacode
numCache.RemoveAll();
strCache.Add(ptCount);
numCache.Add(ptCount);
numCache.Add(formatCode);
numCache.Add(ptCount);
XElement pt;
for (int index = 0; index < categories.Count; index++)

+ 2
- 2
DocX/Properties/AssemblyInfo.cs 파일 보기

@@ -35,5 +35,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.17")]
[assembly: AssemblyFileVersion("1.0.0.17")]
[assembly: AssemblyVersion("1.0.0.18")]
[assembly: AssemblyFileVersion("1.0.0.18")]

Loading…
취소
저장