EPPlus меняет стиль для линий осей - PullRequest
0 голосов
/ 16 мая 2018

Я пытался манипулировать линиями осей для моего графика.Пробирался по всем свойствам объекта ExcelChart, но я не смог найти соответствующее свойство в объекте, чтобы иметь возможность редактировать эту часть.

Может кто-то указать мне на правильное свойство, чтобы иметь возможность рестайлинга осейдля обоих х и у?Я выделил линии осей, которые я имел в виду на рисунке ниже

Excel Chart

РЕДАКТИРОВАТЬ:

Я пытаюсь смоделировать вариантыв разделе оси формата, который позволяет мне редактировать свойства линии по мере необходимости.Вот как это выглядит в Excel, где я могу изменить необходимые свойства, необходимые для оси.

enter image description here

1 Ответ

0 голосов
/ 18 октября 2018

В зависимости от свойства, которое вы хотите изменить, вы можете не найти его доступным через 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 в диаграмму.

Для этого я хотел вставить вращение текста в ось X диаграммы. Вы можете использовать тот же подход для 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);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...