Добавить гиперссылку на узел Smartart с Interop-Excel в C # - PullRequest
0 голосов
/ 19 октября 2019

У меня есть консольное приложение c #, которое создает лист Excel, содержащий объект smartart с макетом hiearchy (OrgChart). Я хотел бы добавить гиперссылки на узлы внутри оргструктуры, но почему-то я не могу.

На рисунке ниже я хотел бы добавить гиперссылку на «Узел 1» (1), которая будет приниматьменя к листу "LinkedSheet" (2): Org chart hyperlink picture

со следующим фрагментом кода, я попытался добавить гиперссылку на лист "orgChart", где textFrame "узла"1 "(var name: ndTop) - это якорь, а лист" LinkedSheet "- это цель:

Sheet.Hyperlinks.Add(ndTop.TextFrame2, "", "'" + LinkSheet.Name + "'!A1", "", "");

Но я получаю следующую ошибку: enter image description here Ошибка переведена наenglish: «Удаленный вызов процедуры не выполнен. (Исключение из HRESULT: 0x800706BE) '. Внутренних исключений нет.

Я добавил в свой проект следующие ссылки:

  • Microsoft.Office.Interop.Excel (пакет Nuget).
  • Библиотека объектов Microsoft Office 16.0 (библиотека COM из ссылки на добавление)

Используется:

using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;

Код:

    private static Excel.Workbook Wb = null;
    private static Excel.Application Xl = null;
    private static Excel.Worksheet Sheet = null;
    private static Excel.Worksheet LinkSheet = null;

    static void Main(string[] args)
    {
        Xl = new Excel.Application();
        Xl.Visible = true;
        Wb = Xl.Workbooks.Add();
        LinkSheet = Wb.Worksheets[1];
        LinkSheet.Name = "LinkedSheet";

        Sheet = Wb.Worksheets.Add();
        Sheet.Name = "OrgChart";


        var myLayout = Xl.SmartArtLayouts[88];

        var smartArtShape = Sheet.Shapes.AddSmartArt(myLayout, 50, 50, 200, 200);

        if (smartArtShape.HasSmartArt == Office.MsoTriState.msoTrue)
        {
            Office.SmartArt smartArt = smartArtShape.SmartArt;
            Office.SmartArtNodes nds = smartArt.AllNodes;
            Office.SmartArtNode ndTop = null;
            foreach (Office.SmartArtNode nd in nds)
            {
                if (nd.Level != 1)
                {
                    nd.Delete();
                }
                else
                {
                    ndTop = nd;
                    ndTop.TextFrame2.TextRange.Text = "Node 1";
                }
            }

            //Adding the hyperlink
            Sheet.Hyperlinks.Add(ndTop.TextFrame2, "", "'" + LinkSheet.Name + "'!A1", "", "");

            Office.SmartArtNode ndLev2_1 = ndTop.AddNode(Office.MsoSmartArtNodePosition.msoSmartArtNodeBelow);
            ndLev2_1.TextFrame2.TextRange.Text = "Node 1.1";

            Office.SmartArtNode ndLev2_2 = ndTop.AddNode(Office.MsoSmartArtNodePosition.msoSmartArtNodeBelow);
            ndLev2_2.TextFrame2.TextRange.Text = "Node 1.2";

            Office.SmartArtNode ndLev2_3 = ndTop.AddNode(Office.MsoSmartArtNodePosition.msoSmartArtNodeBelow);
            ndLev2_3.TextFrame2.TextRange.Text = "Node 1.3";

            Office.SmartArtNode ndLev2_1_1 = ndLev2_1.AddNode(Office.MsoSmartArtNodePosition.msoSmartArtNodeBelow);
            ndLev2_1_1.TextFrame2.TextRange.Text = "Node 1.1.1";
        }
    }
...