51

我试图弄清楚如何使用 EPPlus 而不是包含链接文本的单元格在单元格内编写超链接。我需要它被识别为链接并且可以点击。

任何帮助表示赞赏。

4

6 回答 6

107

这是另一种方法:

var cell = sheet.Cells["A1"];
cell.Hyperlink = new Uri("http://www.google.com");
cell.Value = "Click me!";

我已经测试过了。它工作正常。

于 2012-11-06T04:10:30.460 回答
31

下面的代码对我很好。

string FileRootPath = "http://www.google.com";
_Worksheet.Cells[intCellNumber, 1].Formula = "HYPERLINK(\"" + FileRootPath + "\",\"" + DisplayText + "\")";

我希望这会对你有所帮助。

编码快乐!!

于 2011-10-27T08:56:42.417 回答
24

有几种方法可以解决:

  1. 要使用 URI,然后设置一个人类可读的名称:

    var cell = sheet.Cells["A1"]; cell.Hyperlink = new Uri("https://www.google.com"); cell.Value = "点击我!";

  2. 要使用 ExcelHyperLink 并使用对象初始值设定项设置人类可读的名称:

    var cell = sheet.Cells["A1"]; cell.Hyperlink = new ExcelHyperLink("https://www.google.com") { Display = "点击我!" };

  3. 要使用 =Hyperlink() 公式:

    var cell = sheet.Cells["A1"]; cell.Formula = string.Format("HYPERLINK({0},{1})", "https://www.google.com", "点击我!"); 细胞。计算();

于 2015-05-28T05:07:45.230 回答
4

根据提供的答案和文档,我能够创建一个扩展方法,该方法还可以处理正确的超链接格式。如果需要,它会创建一个命名样式,并将该样式用于所有后续超链接:

public static void WriteHyperlink(this ExcelRange cell, string text, string url, bool excelHyperlink = false, bool underline = true)
{
    if (string.IsNullOrWhiteSpace(text))
        return;

    // trying to reuse hyperlink style if defined
    var workBook = cell.Worksheet.Workbook;
    string actualStyleName = underline ? HyperLinkStyleName : HyperLinkNoUnderlineStyleName;

    var hyperlinkStyle = workBook.Styles.NamedStyles.FirstOrDefault(s => s.Name == actualStyleName);
    if (hyperlinkStyle == null)
    {
        var namedStyle = workBook.Styles.CreateNamedStyle(actualStyleName);  
        namedStyle.Style.Font.UnderLine = underline;
        namedStyle.Style.Font.Color.SetColor(Color.Blue);
    }

    if (excelHyperlink)
        cell.Hyperlink = new ExcelHyperLink(url) { Display = text };
    else
    {
        cell.Hyperlink = new Uri(url);
        cell.Value = text;
        cell.StyleName = actualStyleName;
    }
}

如果没有样式,超链接看起来就像常规文本,如果cell.Hyperlink = new Uri(url);使用没有明确的样式(尽管光标会正确地指示文本实际上是超链接文本)。

于 2017-04-14T13:56:53.860 回答
1

我不知道 EPPlus,但在 VBA 中(我猜 C# 会使用相同的原理)你会使用以下代码:

Sub Test()

    ' place value into cell
    ActiveSheet.[A1] = 13

    ' create link and set its range property
    ActiveSheet.Hyperlinks.Add ActiveSheet.[A1], "http://www.google.at"

    ' use cell in a calculation
    ActiveSheet.[A2].Formula = "=A1+2"

End Sub

超链接是具有范围属性的对象,因此虽然您的单元格值可以通过过度键入来更改,但链接将保留。长按鼠标编辑单元格

希望这会有所帮助 - 祝 MikeD 好运

于 2011-10-04T13:59:59.900 回答
1

如果您正在使用 EPPlus 并希望在同一文档中创建指向另一个工作表的链接,那么这是执行此操作的正确方法:

  var link = "Another Excel Sheet"; //Maximum length is 31 symbols
  using (var excel = new ExcelPackage())
  {
       var ws = excel.Workbook.Worksheets.Add("Test");
       ws.Cells[row, col].Hyperlink =
                new ExcelHyperLink((char)39 + link + (char)39 + "!A1", 
                "Name of another excel sheet could be more then 31 symbols");
  }

这是在 Excel 文档中创建指向另一个工作表的链接的正确方法。使用带HYPERLINK函数的公式后,如果将文件下载到客户端,最新的 Excel 版本将引发安全警告。

于 2018-05-04T13:21:27.033 回答