您知道有没有很好的库来创建Word文档(非Excel表格),包括图表。 到目前为止,我已经尝试过:
此外,一个很好的链接到一个很好的文档示例将不胜感激。
我想拥有一个不错的库,它不像OOXML Api那样复杂。 而且它应该是免费的。 Office已安装在运行的计算机上。
感谢克里斯
答案 0 :(得分:0)
您看过OpenXML吗?
这里是带有示例的链接,以用单词https://code.msdn.microsoft.com/office/How-to-create-Chart-into-a7d424f6
创建图表答案 1 :(得分:0)
到目前为止,我还没有找到更好的图书馆。因此,我将继续使用DocX。正如Magnetron所说,您可以修改后面的XML。因此,您可以对图表进行所需的操作,读取XML并按照自己的方式进行修改。 例如,我发布了一种使用DocX更改Word Chart上的Axis标题的方法。 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来完成我想要的事情。无论如何,我认为设置轴标题的开销太大。