Как создать ссылку внутри ячейки с помощью EPPlus - PullRequest
38 голосов
/ 03 октября 2011

Я пытаюсь выяснить, как написать гиперссылку внутри ячейки, используя EPPlus вместо ячейки, содержащей текст ссылки. Мне нужно, чтобы он был распознан как ссылка и был кликабелен.

Любая помощь приветствуется.

Ответы [ 6 ]

89 голосов
/ 06 ноября 2012

Это другой способ сделать:

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

Я проверял.Работает нормально.

20 голосов
/ 27 октября 2011

Приведенный ниже код работал нормально со мной.

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

Надеюсь, это поможет вам.

Удачного кодирования !!

19 голосов
/ 28 мая 2015

Есть несколько способов сделать это:

1) Чтобы использовать URI, затем установите удобочитаемое имя

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

2) Чтобы использовать ExcelHyperLink и установить удобочитаемое имя с помощью инициализатора объекта

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

3) Для использования = гиперссылка () формула

var cell = sheet.Cells["A1"];
cell.Formula = string.Format("HYPERLINK({0},{1})", "http://www.google.com", "Click me!");
cell.Calculate();
2 голосов
/ 14 апреля 2017

На основе предоставленных ответов и документации я смог создать метод расширения, который также занимается правильным форматированием гиперссылок. При необходимости он создает именованный стиль и использует этот стиль для всех последующих гиперссылок:

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); используется без явного стиля (хотя курсор будет правильно указывать, что текст на самом деле является текстом гиперссылки).

1 голос
/ 04 мая 2018

Если вы используете 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 выдаст предупреждения безопасности.

1 голос
/ 04 октября 2011

Я не знаю 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

Гиперссылки - это объекты, имеющие свойство range, поэтому, хотя значение вашей ячейки можно изменить путем ее набора, ссылка останется. Редактировать ячейку длинным щелчком мыши

Надеюсь, это поможет - удачи MikeD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...