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 の場合は右側に移動し、そうでない場合は左側に移動します。もちろん、下に移動する必要があります。各自。考慮すべきもう 1 つの点は、パイが回転している場合、中心の値を 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";
}