C# 使用c中的interop excel将超链接添加到smartart节点#
我有一个c#控制台应用程序,它创建一个excel工作表,其中包含一个具有层次结构布局(OrgChart)的smartart对象。我想向组织结构图中的节点添加超链接,但不知为什么我不能 在下图中,我想添加一个指向“节点1”(1)的超链接,它将带我进入“LinkedSheet”工作表(2): 使用以下代码片段,我尝试向工作表“orgChart”添加超链接,其中“Node 1”(变量名称:ndTop)的textFrame是锚,工作表“LinkedSheet”是目标: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
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对象中的节点,那么一定值得一看。你知道这是否可行吗?