VSTO で Excel のコネクタを使う方法
Visual Studio Tools for Office (VSTO) で Excel のコネクタを使う方法について、サンプルと共に説明します。 VBA でやるのとほぼ同じですが、コネクタの接続部分が多少異なるようです。
インテリセンスやコレクションクラスが便利なので、 C# (.NET) で書く方が簡単ですね。
private void Sheet1_Startup(object sender, System.EventArgs e) { for (int i = 0; i < 10; ++i) { // 四角1を作成 Excel.Shape shape1 = Shapes.AddShape( Microsoft.Office.Core.MsoAutoShapeType.msoShapeRectangle, 10, 100 * i, 100, 80); shape1.TextFrame.Characters(0, 0).Text = i.ToString(); // 四角2を作成 Excel.Shape shape2 = Shapes.AddShape( Microsoft.Office.Core.MsoAutoShapeType.msoShapeRectangle, 200, 100 * i, 100, 80); shape2.TextFrame.Characters(0, 0).Text = i.ToString(); // コネクタルートの自動設定を後で行うため、仮の位置 const int TEMPORARY_POSITION = 1; // コネクタ作成 Excel.Shape connector = Shapes.AddConnector( Microsoft.Office.Core.MsoConnectorType.msoConnectorCurve, TEMPORARY_POSITION, TEMPORARY_POSITION, TEMPORARY_POSITION, TEMPORARY_POSITION); // 四角1と四角2を接続 connector.ConnectorFormat.BeginConnect(shape1, TEMPORARY_POSITION); connector.ConnectorFormat.EndConnect(shape2, TEMPORARY_POSITION); // ルート再設定 connector.RerouteConnections(); } }
一度実行してみるとわかりやすいと思います。細かい内容はコメントを参考にしてください。
参考までに、 VBA で記述した場合は以下のようになります。
Dim shape1 As Shape Set shape1 = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 100, 80) Dim shape2 As Shape Set shape2 = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 200, 10, 100, 80) With ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 1, 1, 1, 1) .ConnectorFormat.BeginConnect shape1, 1 .ConnectorFormat.EndConnect shape2, 1 .RerouteConnections End With