EPPlus改变轴线的样式

时间:2018-05-16 13:55:02

标签: c# epplus

我一直试图操纵我的图表的轴线。一直在挖掘ExcelChart对象的所有属性,但我在对象中找不到相应的属性才能编辑这个部分。

有人能指出正确的属性能够为x和y重新设置轴吗?我突出显示了下图中的轴线

Excel Chart

编辑:

我正在尝试模拟格式轴部分中的选项,允许我根据需要编辑线属性。这就是它在excel中的样子,我可以在这里更改轴所需的属性。

enter image description here

1 个答案:

答案 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);
        }