我一直试图操纵我的图表的轴线。一直在挖掘ExcelChart对象的所有属性,但我在对象中找不到相应的属性才能编辑这个部分。
有人能指出正确的属性能够为x和y重新设置轴吗?我突出显示了下图中的轴线
编辑:
我正在尝试模拟格式轴部分中的选项,允许我根据需要编辑线属性。这就是它在excel中的样子,我可以在这里更改轴所需的属性。
答案 0 :(得分:0)
取决于您要更改的属性,您可能找不到通过EPP公开的属性。 查看基础图表的XML元素,并通过检查已保存的电子表格(来自excel)了解需要添加的内容。
string xlFile = @"c:\temp\epp\epptest.xlsx";
string sheetName = "TestData";
string ChartName = "lineChartTest";
DisplaySheetNode(xlFile, sheetName, ChartName);
public void DisplaySheetNode(string xlsFile, string sheetname,string sChartName)
{
FileInfo existingFile = new FileInfo(xlsFile);
using (var package = new ExcelPackage(existingFile))
{
var ws = package.Workbook.Worksheets[sheetname];
var drawings = ws.Drawings;
var chart = (ExcelLineChart)drawings[sChartName];
var nsm = drawings.NameSpaceManager;
var nschart = nsm.LookupNamespace("c");
var nsa = nsm.LookupNamespace("a");
var doc = chart.ChartXml;
var node = chart.ChartXml.SelectSingleNode(@"c:chartSpace/c:chart/c:plotArea/c:catAx", nsm);
System.Diagnostics.Debug.WriteLine(PrintXMLNode(node));
}
}
然后将所需的XMLNode插入图表中。
为此,我想将文本旋转插入到图表的XAxis中。 您可以对YAxis使用相同的方法。由于属性几乎相同。
public enum rotation : int
{
none,
r90 = 5400000,
r270 = -5400000,
rNeg32 = -1920000
}
rotation rot = rotation.r90;
XmlNamespaceManager nsm = chart.WorkSheet.Drawings.NameSpaceManager;
XmlDocument doc = chart.ChartXml;
XmlNode node = chart.ChartXml.SelectSingleNode(@"c:chartSpace/c:chart/c:plotArea/c:catAx", nsm);
XmlNode InsertAfter = chart.ChartXml.SelectSingleNode(@"c:chartSpace/c:chart/c:plotArea/c:catAx/c:tickLblPos", nsm);
XNamespace c = XNamespace.Get(nsm.LookupNamespace("c")); // @"http://schemas.openxmlformats.org/drawingml/2006/chart";
XNamespace a = XNamespace.Get(nsm.LookupNamespace("a")); // @"http://schemas.openxmlformats.org/drawingml/2006/main";
XElement xml = new XElement(c + "txPr", new XAttribute(XNamespace.Xmlns + "c", c),
new XElement(a + "bodyPr", new XAttribute("rot", (int)rot), new XAttribute("vert", "horz"),new XAttribute(XNamespace.Xmlns + "a", a)),
new XElement(a + "lstStyle", new XAttribute(XNamespace.Xmlns + "a", a)),
new XElement(a + "p", new XAttribute(XNamespace.Xmlns + "a", a),
new XElement(a + "pPr",
new XElement(a + "defRPr")
),
new XElement(a + "endParaRPr", new XAttribute ("lang", "en-US"))
)
);
using (XmlReader xmlReader = xml.CreateReader())
{
XmlNode newNode = doc.ReadNode(xmlReader);
//node.AppendChild(newNode);
node.InsertAfter(newNode, InsertAfter);
}