在 OOXML 电子表格文档中,可以通过图表绘图部件将 UserShapes 添加到图表空间。如果引用正确,它们将与图表一起出现在图表空间中。我设法使用 C# 和 DocumentFormat.OpenXml 以编程方式完成此操作。
但是,我无法将用户对象与图表中的系列正确对齐(例如条形图)。我尝试与相对锚点对齐,但调整图表大小会导致不同的位置。绘制的系列。这主要是因为无论图表大小如何,轴标签和图表边距都保持不变,正如在 Excel 应用程序中调整图表大小时可以看到的那样。只有删除边距和标签才能让我通过使用相对定位来保持系列的位置:
那么将 UserShapes 对齐到显示的图表系列的正确方法是什么?我是不是错过了一些有用的东西?
当然,我可以去掉轴和标题,也许还可以去掉图表和图形框架之间的边距(仍然不知道atm如何),但是图表变得有点无用......
任何提示将不胜感激:)
我找到了解决问题的方法。
您需要通过指定具有左、上、宽和高值的
PlotArea.Layout
来定义图表的 ManualLayout
。然后您就知道绘图周围的边距在 Excel 图表中如您所指定的那样。
使用添加形状的
RelativeAnchorSize
,然后可以通过将手动布局的边距添加到图中的相对偏移量来计算图中的位置,以获得图表中的位置。
例如对于 x 位置:
xRange = maximumXAxisValue - minimumXAxisValue;
xLeft = LayoutLeft + (LayoutWidth * (UserShapeLeft - minimumXAxisValue) / xRange);
xRight = LayoutLeft + (LayoutWidth * (UserShapeRight - maximumXAxisValue) / xRange);