通过代码添加超链接到Excel

时间:2017-02-10 16:32:39

标签: c# hyperlink

我正在使用这个C#过程,它将超链接添加到工作簿的G列。它适用于99%的情况,但如果A列中的值中包含',则语法不会添加有效的超链接。我以为我在我的代码行中占了特殊字符

if (cellVal == "*,*" 
|| cellVal == "*'*" 
|| cellVal == "*&*" 
|| cellVal == "*-*" 
|| cellVal == "*.*")

然而,当单步执行时,总是会转到else块,我不知道为什么。例如,以下值明显包含',但代码再次点击else

  

Joe的车库
  杰克的汉堡小屋   
拉里的巨型震动   
鲍勃的啤酒

我需要在此语法中更改什么才能以正确的方式创建超链接?

public static void AddHyperlinksToExcel()
{
   long lr, i;
   string cellVal;
   WS = xlApp.ActiveWorkbook.ActiveSheet;
   lr = WS.Cells[WS.Rows.Count, 2].End(Excel.XlDirection.xlUp).Row;
        for (i = 2; i <= lr; i++)
        {
            Object Anchor = WS.Cells[i, 7];
            Object TextToDisplay = Convert.ToString(WS.Cells[i, 9]);
            cellVal = WS.Cells[i, 1].Value;
            rangeToHoldHyperlink = WS.Range["G" + i];
            if (cellVal == "*,*" || cellVal == "*'*" || cellVal == "*&*" || cellVal == "*-*" || cellVal == "*.*")
            {
                xlApp.ActiveSheet.Hyperlinks.Add(Anchor, "", "'" + cellVal + "'!A1", "", TextToDisplay);
            }
            else
            {
                xlApp.ActiveSheet.Hyperlinks.Add(Anchor, "", "'" + cellVal + "'!A1", "", TextToDisplay);
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

虽然来自@PhillipH的答案将解决所有或之外的所有案例。原因是,Excel将apastrophe转换为双引号。例如,在Excel 2016中,我创建了一个名为Joe's Garage的工作表,并开始录制宏。我遵循的步骤是

  

1)单击功能区中的“插入”   2)从功能区中选择“超链接”   
3)在显示单击的选项的左侧&#39;放置在此文档中&#39;   
4)选择要链接到的工作表名称   
注意 - 如果您查看您尝试链接到的工作表名称,则其名称已更改为'Joe''s Garage'   
5)单击确定

现在你有一个功能完整的超链接,其中包含撇号的值。

这不是C#语法,但这是Excel VBA从宏录制器中呈现的内容,其说明与上述步骤相同

Range("C2").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    "'Joe''s Garage'!A1", TextToDisplay:="Link To Joe's Garage"

答案 1 :(得分:0)

如果cellVal是System.String,您的代码将无法按预期方式工作.net不支持使用“==”进行通配符匹配。您应该使用cellValue == '*&*'

替换cellValue.Contains("&")