如何添加到文本标签对于使用Open xml或EPPLUS的Excel图表

我对C#中的Excel自动化完全陌生

实际上,我遇到了一些C#.net中的Excel生成的API,如CLOSED XML,EEPLUS和spreadsheetlight by vincent,Microsoft的Open XML,Microsoft的Interop excel

根据我的研究

CLOSED XML – 不支持图表

EEPLUS – 支持图表

传播轻 – 非常容易使用和图表也支持

打开XML复杂很难工作

我是完全正确的与传播轻的光是良好的API,但我无法find一个解决scheme如何添加标签内的图表

我希望任何一个堆栈溢出遇到同样的问题。

我需要在图表中添加像文本一样的文本标签。

请让我知道如何find解决任何一个这个免费的API

请在这里find图表信息

感谢兰吉斯

您可以通过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 ,它可以放置在图表中,并随着它移动/resize。 但是,你将不得不从头开始(或至多另一个图书馆)。 如果您在Excel中激活图表,并执行“插入”>“文本框”来查看外观。

另一个select是使用一个未使用的标题,比如说一个Axis标题,并将其移动到与图表标题相似的位置。

但最简单的select是简单地添加一个形状。 退步是如果你移动图表,它将不会随着它移动:

 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";

如果您符合条件(less于100万美元的收入),那么整套控件都可以通过社区许可计划免费获得(商业应用程序)。 社区许可证是完整的产品,没有限制或水印。

注意:我为Syncfusion工作。

在这里输入图像说明

如果图表已经存在于您的模板中,而您只是添加数据,则可以从页面上的单元格中读取框中的内容。 然后从C#中,你只需要写入单元格。 这使您可以在Excel中执行任何格式化或定位。