代码之家  ›  专栏  ›  技术社区  ›  Chris S.

用于创建带图表的Word文档的.Net Api

  •  -2
  • Chris S.  · 技术社区  · 8 年前

    你知道有什么好的库可以创建Word文档(不是Excel表格)包括图表。

    1. 文档->正在工作,但没有足够的选项来修改图形
    2. NPOI->不能让它工作。打开包含图表的docx时抛出错误。

    此外,一个很好的链接到一个很好的文件例子将不胜感激。

    它也应该是免费的。Office安装在运行的机器上。

    谢谢克里斯

    2 回复  |  直到 8 年前
        1
  •  0
  •   simon Whale    8 年前

    下面是一个链接,其中包含一个在word中创建图表的示例 https://code.msdn.microsoft.com/office/How-to-create-Chart-into-a7d424f6

        2
  •  0
  •   Chris S.    8 年前

    例如,我发布了一个方法,用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.");
            }
        }