创建自定义Excel饼图标签

时间:2012-08-08 19:25:34

标签: c# excel

我是使用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";
}

0 个答案:

没有答案