[英]How to add to Text Label For excel Charts using Open xml or EPPLUS
我对C#中的Excel自动化是全新的
实际上,我遇到了一些C#.net中用于Excel生成的API,例如vincent的CLOSED XML,EEPLUS和电子表格灯,Microsoft的Open XML,Microsoft的Interop excel
根据我的研究
CLOSED XML-不支持图表
EEPLUS-支持图表
散光-非常易于使用,还支持图表
开放的XML-很难工作
我对Spread light灯是很好的API完全满意,但是我找不到如何在图表内添加标签的解决方案
我希望堆栈溢出中的任何一个都遇到相同的问题。
我需要在图表中添加标签,例如文本,例如图表中的公司。
请让我知道如何使用此免费API查找解决方案
谢谢
兰吉斯
您可以通过Epplus添加标题,但定位需要XML编辑:
[TestMethod]
public void Chart_Manual_Title_Test()
{
//http://stackoverflow.com/questions/37304860/how-to-add-to-text-label-for-excel-charts-using-open-xml-or-epplus
//Throw in some data
var datatable = new DataTable("tblData");
datatable.Columns.AddRange(new[] { new DataColumn("Col1", typeof(int)), new DataColumn("Col2", typeof(int)), new DataColumn("Col3", typeof(object)) });
for (var i = 0; i < 10; i++)
{
var row = datatable.NewRow();
row[0] = i;
row[1] = i * 10;
row[2] = Path.GetRandomFileName();
datatable.Rows.Add(row);
}
//Create a test file
var fileInfo = new FileInfo(@"c:\temp\Chart_Manual_Title_Test.xlsx");
if (fileInfo.Exists)
fileInfo.Delete();
using (var pck = new ExcelPackage(fileInfo))
{
var workbook = pck.Workbook;
var worksheet = workbook.Worksheets.Add("Sheet1");
worksheet.Cells.LoadFromDataTable(datatable, true);
var chart = worksheet.Drawings.AddChart("chart test", eChartType.XYScatter);
var series = chart.Series.Add(worksheet.Cells["B2:B11"], worksheet.Cells["A2:A11"]);
chart.Title.Text = "XYZ Corp";
//Add custom layout
var chartXml = chart.ChartXml;
var nsm = new XmlNamespaceManager(chartXml.NameTable);
var nsuri = chartXml.DocumentElement.NamespaceURI;
nsm.AddNamespace("c", nsuri);
nsm.AddNamespace("a", "http://schemas.openxmlformats.org/drawingml/2006/main");
//Set the title overlay
var overlayNode = chartXml.SelectSingleNode("c:chartSpace/c:chart/c:title/c:overlay", nsm);
overlayNode.Attributes["val"].Value = "1";
//Set the font size
var defRPrNode = chartXml.SelectSingleNode("c:chartSpace/c:chart/c:title/c:tx/c:rich/a:p/a:pPr/a:defRPr", nsm);
defRPrNode.Attributes["sz"].Value = "1200";
//Get the title layout and add the manual section
var layoutNode = chartXml.SelectSingleNode("c:chartSpace/c:chart/c:title/c:layout", nsm);
var manualLayoutNode = chartXml.CreateElement("c:manualLayout", nsuri);
layoutNode.AppendChild(manualLayoutNode);
//Add coordinates
var xModeNode = chartXml.CreateElement("c:xMode", nsuri);
var attrib = chartXml.CreateAttribute("val");
attrib.Value = "edge";
xModeNode.Attributes.Append(attrib);
manualLayoutNode.AppendChild(xModeNode);
var yModeNode = chartXml.CreateElement("c:yMode", nsuri);
attrib = chartXml.CreateAttribute("val");
attrib.Value = "edge";
yModeNode.Attributes.Append(attrib);
manualLayoutNode.AppendChild(yModeNode);
var xNode = chartXml.CreateElement("c:x", nsuri);
attrib = chartXml.CreateAttribute("val");
attrib.Value = "0.9";
xNode.Attributes.Append(attrib);
manualLayoutNode.AppendChild(xNode);
var yNode = chartXml.CreateElement("c:y", nsuri);
attrib = chartXml.CreateAttribute("val");
attrib.Value = "0.95";
yNode.Attributes.Append(attrib);
manualLayoutNode.AppendChild(yNode);
pck.Save();
}
}
这将在输出中为您提供:
好的,那有点困难。 正确的方法是使用relSizeAnchor
,可以将其放置在图表中并随其移动/调整大小。 但是,您将不得不从头开始(或者最好是另一个库)。 如果您在excel中激活图表并执行“插入”>“文本框”以查看其外观。
另一种选择是通过使用未使用的标题(例如说“ Axis Title”(轴标题))并将其移动类似于我制作图表标题的方式来伪造它。
但是最简单的选择是简单地添加形状。 缺点是,如果您移动图表,它将不会随之移动:
var tb1 = worksheet.Drawings.AddShape("tb1", eShapeStyle.Rect);
tb1.Text = "ABC Company";
tb1.SetPosition(1, 0, 2, 0);
tb1.SetSize(200, 20);
tb1.Font.Color = Color.Black;
tb1.TextAlignment = eTextAlignment.Center;
tb1.Fill.Color = Color.LightYellow;
tb1.Fill.Style = eFillStyle.SolidFill;
tb1.Border.Fill.Color = Color.Red;
与上述内容结合使用时,将其作为输出:
Essential XlsIO可以将文本框添加到Excel图表。
//Accessing the chart of the worksheet IChartShape shape = workbook.Worksheets[0].Charts[0]; //Adding textbox to chart shape shape.TextBoxes.AddTextBox(1,1, 100,200); //Setting position for textbox shape.TextBoxes[0].Top = 900; shape.TextBoxes[0].Left = 750; //Adding text to textbox shape.TextBoxes[0].Text = "New textbox";
如果您符合资格(收入少于100万美元),则可以通过社区许可计划免费获得整套控件(也可以用于商业应用程序)。 社区许可证是完整的产品,没有任何限制或水印。
注意:我为Syncfusion工作。
如果图表已经存在于模板中,而您只是在添加数据,则可以从页面上的单元格中读取框的内容。 然后,您只需从C#中写入单元格即可。 这使您可以在Excel中进行所需的任何格式设置或定位。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.