.Net Api для создания документов Word с диаграммами - PullRequest
0 голосов
/ 20 сентября 2018

Знаете ли вы какую-нибудь хорошую библиотеку для создания документов Word (не листов Excel), включая диаграммы.Я пытался до сих пор:

  1. DocX -> работает, но не имеет достаточно вариантов для изменения графика
  2. NPOI -> не могу заставить его работать.Выдает ошибку при открытии документа с диаграммами.
  3. NetOffice -> не может создать график.

Также будет полезна хорошая ссылка на хороший документированный пример.

Я хотел бы иметь хорошую библиотеку, которая не так сложна, как OOXML Api.Также это должно быть бесплатно.Office установлен на работающей машине.

Спасибо, Крис

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Лучшей библиотеки я пока не нашел.Так что я буду продолжать использовать DocX.Как сказал Магнетрон, вы можете изменить XML.Таким образом, вы можете просто делать то, что вы хотите для вашей диаграммы, считывать XML и изменять его по-своему.Например, я публикую метод изменения названия оси на диаграмме Word с помощью DocX.Регион XML - это необходимое слово xml.С помощью кода вы можете создать этот xml.

public void SetYTitle(string v)
    {
        #region xml
        //  <c:valAx>
        //      <c:axId val="82091008"/>
        //      <c:scaling>
        //          <c:orientation val="minMax"/>
        //          <c:max val="90"/>
        //          <c:min val="65"/>
        //      </c:scaling>
        //      <c:delete val="0"/>
        //      <c:axPos val="l"/>
        //      <c:majorGridlines/>
        //      <c:title>
        //          <c:tx>
        //              <c:rich>
        //                  <a:bodyPr rot="-5400000" vert="horz"/>
        //                  <a:lstStyle/>
        //                  <a:p>
        //                      <a:pPr>
        //                          <a:defRPr/>
        //                      </a:pPr>
        //                      <a:r>
        //                          <a:rPr lang="de-DE"/>
        //                          <a:t>title y</a:t>
        //                      </a:r>
        //                  </a:p>
        //              </c:rich>
        //          </c:tx>
        //          <c:layout/>
        //          <c:overlay val="0"/>
        //      </c:title>
        #endregion
        XNamespace nsC = "http://schemas.openxmlformats.org/drawingml/2006/chart";
        XNamespace nsA = "http://schemas.openxmlformats.org/drawingml/2006/main";
        var existent = ResChart.Xml.Descendants().Where(s => s.Name.LocalName.Equals("valAx")).FirstOrDefault();
        if (existent != null)
        {
            var title = new XElement(nsC + "title");
            var tx = new XElement(nsC + "tx");
            var rich = new XElement(nsC + "rich");
            var bodyPr = new XElement(nsA + "bodyPr");
            bodyPr.SetAttributeValue(XName.Get("rot"), "-5400000");
            bodyPr.SetAttributeValue(XName.Get("vert"), "horz");
            var lstStyle = new XElement(nsA + "lstStyle");
            var p = new XElement(nsA + "p");
            var pPr = new XElement(nsA + "pPr");
            var defRPr = new XElement(nsA + "defRPr");
            var r = new XElement(nsA + "r");
            var rPr = new XElement(nsA + "rPr");
            rPr.SetAttributeValue(XName.Get("lang"), "de-DE");
            var t = new XElement(nsA + "t");
            t.SetValue(v);
            var layout = new XElement(nsC + "layout");
            var overlay = new XElement(nsC + "overlay");
            overlay.SetAttributeValue(XName.Get("val"), "0");

            //build tree
            title.Add(tx);
            tx.Add(rich);
            rich.Add(bodyPr);
            rich.Add(lstStyle);
            rich.Add(p);
            p.Add(pPr);
            pPr.Add(defRPr);
            p.Add(r);
            r.Add(rPr);
            r.Add(t);
            title.Add(layout);
            title.Add(overlay);

            existent.Add(title);
        }
        else
        {
            logger.Warn("no axis def existent.");
        }
    }

Так что я в основном использую OOXML, чтобы делать то, что я хочу.Во всяком случае, я думаю, что это слишком много для установки заголовка оси.

0 голосов
/ 20 сентября 2018

Вы смотрели на OpenXML?

Вот ссылка с примером для создания диаграммы в слове https://code.msdn.microsoft.com/office/How-to-create-Chart-into-a7d424f6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...