C# 使用c中的interop excel将超链接添加到smartart节点#

C# 使用c中的interop excel将超链接添加到smartart节点#,c#,.net,excel,office-interop,excel-interop,C#,.net,Excel,Office Interop,Excel Interop,我有一个c#控制台应用程序,它创建一个excel工作表,其中包含一个具有层次结构布局(OrgChart)的smartart对象。我想向组织结构图中的节点添加超链接,但不知为什么我不能 在下图中,我想添加一个指向“节点1”(1)的超链接,它将带我进入“LinkedSheet”工作表(2): 使用以下代码片段,我尝试向工作表“orgChart”添加超链接,其中“Node 1”(变量名称:ndTop)的textFrame是锚,工作表“LinkedSheet”是目标: Sheet.Hyperlinks

我有一个c#控制台应用程序,它创建一个excel工作表,其中包含一个具有层次结构布局(OrgChart)的smartart对象。我想向组织结构图中的节点添加超链接,但不知为什么我不能

在下图中,我想添加一个指向“节点1”(1)的超链接,它将带我进入“LinkedSheet”工作表(2):

使用以下代码片段,我尝试向工作表“orgChart”添加超链接,其中“Node 1”(变量名称:ndTop)的textFrame是锚,工作表“LinkedSheet”是目标:

Sheet.Hyperlinks.Add(ndTop.TextFrame2, "", "'" + LinkSheet.Name + "'!A1", "", "");
但我得到了以下错误: 错误已翻译为英语: '远程过程调用失败。(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";
        }
    }

您能说明错误消息并向代码中添加用法/引用吗?@WolfgangJacques我已经添加了异常和用法/引用的图片只是一个简单的问题,您是在尝试操作
.xls
文件还是只操作
.xslx
,如果只是<代码> .xSLX/COD>您可能会考虑将互操作库关闭到提供与Office文件交互的更现代的SDK微软(作为一个额外的奖励,不需要在计算机上安装不同于互操作的Office)。它被称为OpenXML,但这只是
.xslx
文件(以及以
.x*开头的其他office文件)所使用的文件格式的名称。我个人从未使用过SmartArt,但如果我必须猜测从何处开始,应该使用名称空间。@ScottChamberlain控制台应用程序的主要目的是创建一个带有SmartArt(组织结构图)对象的excel工作表(.xlsx)。如果您既可以创建Smartart对象,又可以操作该Smartart对象中的节点,那么一定值得一看。你知道这是否可行吗?