我正在使用 C# 以编程方式在 Excel 中创建饼图。我需要为切片添加一些自定义标签。基本上,我希望饼图左侧的切片标签从图表区域的左上角开始向下。在右边同样的事情。我的问题是,我怎样才能找到切片弧的中点来知道标签应该在图表的哪一侧?
我想如果我得到系列中的积分我可以找到它,但我没有看到它。
Point p = (Point)oSeriesCollection.Item(1).Points(1);
有什么建议么?
编辑
意识到我可能应该包括更多细节。当我说“自定义标签”时,我的意思是我将使用下面的代码在图表上放置文本框。从我所做的所有搜索中,我还没有找到另一种方法(使用内置数据标签)。如果有办法调整和放置内置数据标签的大小,我会全力倾听有关如何做到这一点的任何提示。
oChart.Chart.Shapes.AddTextbox(MsoTextOrientation.msoTextOrientationHorizontal, 0, 0, 100, 100).TextFrame.Characters(Type.Missing, Type.Missing).Text = "text";
编辑 2 对于任何对此感兴趣的人,我在 Excel 论坛上找到了答案(它使用的是 VBA)。添加文本框的行只是一个占位符,但如果中心在 0 到 180 之间,它将在右侧,否则它将在左侧,当然,我必须将它们向下移动每一个。要考虑的另一件事是,如果饼图已旋转,则需要通过 FirstSliceAngle 修改中心值。
double total=0;
foreach (object item in (Array)oSeriesCollection.Item(1).Values)
{
total+=Convert.ToDouble(item);
}
double runtotal=0;
for (int x=1; x <= ((Array)oSeriesCollection.Item(1).Values).GetUpperBound(0); x++)
{
object item = ((Array)oSeriesCollection.Item(1).Values).GetValue(x);
double center = (runtotal + Convert.ToDouble(item) / 2) / total * 360;
runtotal+=Convert.ToDouble(item);
chart.Chart.Shapes.AddTextbox(MsoTextOrientation.msoTextOrientationHorizontal, 0, 0, 50, 10).TextFrame.Characters(Type.Missing, Type.Missing).Text = "some text";
}