使用OpenXML自动化PowerPoint - 计算图表中某个点的绝对位置

时间:2017-03-15 13:22:16

标签: c# powerpoint openxml office-interop

我们正在制作PowerPoint演示文稿,其中包含折线图。在某些情况下,我们需要绘制一个箭头(或其他形状),指向图表中的特定点,给定图表中点的(x,y)值。

为此,我们需要图表点的绝对位置,相对于幻灯片的左上角。

目前我们正在使用Interop来计算图表绘图区域的尺寸,然后我们可以从中计算给定图表点的绝对位置,如下所示:

// The chart point's X- and Y values
double x = ... ;
double y = ... ;
PowerPoint.Shape shape = ... ;
PowerPoint.Chart chart = shape.Chart;

double plotAreaLeft = shape.Left + chart.ChartArea.Left + chart.PlotArea.InsideLeft;
double plotAreaTop = shape.Top + chart.ChartArea.Top + chart.PlotArea.InsideTop;

double plotAreaWidth = chart.PlotArea.InsideWidth;
double plotAreaHeight = chart.PlotArea.InsideHeight;

// Calculating the range of X- and Y values
double xMin = ... ;
double xRange = ... ;
double yMin = ... ;
double yRange = ... ;

// Calculating the exact position of the point
double left = plotAreaLeft + (x - xMin) * plotAreaWidth / xRange;
double top = plotAreaTop + (y - yMin) * plotAreaHeight / yRange;

现在这很好用,但我们正在将应用程序移动到服务器,并从Interop切换到OpenXml以创建演示文稿。

问题是PlotArea的尺寸不是固定的,而是由PowerPoint动态计算的,这个计算似乎取决于很多因素,包括标签,字体,图例和用户手动改变PlotArea的位置。我们正在尝试对此计算进行逆向工程,但到目前为止,我们还没有能够提出每次都能达到目标的解决方案。

我们已经尝试过商业框架,例如Aspose.Slides,但它们似乎也有同样的问题(功能列在他们的API中,但是值从未计算过 - 它们的值总是NaN)。

我的问题是:是否有人可以使用我们可以使用的任何帮助或资源,或有任何遇到此问题的经验?

提前致谢。

2 个答案:

答案 0 :(得分:0)

我正在Aspose担任开发人员推广员。
感谢您指出图表点的绝对位置问题,并计算Aspose.Slides中PlotArea的尺寸。

要解决上述问题:

  1. ActualX,ActualY,ActualWidth,ActualHeight已在v17.3中添加到IChartPlotArea:https://apireference.aspose.com/net/slides/aspose.slides.charts/ichartplotarea

  2. 在v17.4中修复了获取PlotArea和其他图表元素(DataLabel,DataPoint等)的绝对X,Y值的问题。

我建议您尝试使用最新版本的Aspose.Slides以获得最新的更新和修复。
希望能解决您的问题。

答案 1 :(得分:-1)

我忍不住;我也对您的问题的解决方案感兴趣(对于this产品)。这样我希望收到每条新评论的提醒(我没有看到'观看主题'选项)。