2011-10-03 30 views
30

Estoy tratando de averiguar cómo escribir un hipervínculo dentro de una celda usando EPPlus en lugar de la celda que contiene el texto del enlace. Necesito que se lo reconozca como un enlace y se pueda hacer clic.Cómo crear un enlace dentro de una celda usando EPPlus

Cualquier ayuda es apreciada.

+0

¿No puedes usar la fórmula ** = HYPERLINK() **? –

+0

has probado ** hoja de trabajo. Celdas [i, j] .Hyperlink ** = new Uri (localfilepath)? –

+0

@TimWilliams que no funcionará porque los datos se cargan desde un conjunto de datos. – IEnumerator

Respuesta

18

El código siguiente trabajó bien para mí.

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

Espero que esto te ayude.

Happy coding !!

+0

¿Por qué no '_Worksheet.Cells [intCellNumber, 1] .Formula = String.Format (" HYPERLINK (\ "{0} \", \ "{1} \") ", FileRootPath, DisplayText)'? – MrOodles

+1

¿Por qué no 'String.Format (@" HYPERLINK ("" {0} "", "" {1} ""), FileRootPath, DisplayText) ';) – Pakman

+2

Para mí no parece una solución universal porque la función HYPERLINK puede no funciona para versiones no inglesas de MS Excel. Desde este punto de vista, la respuesta de Han es mejor. –

1

No sé EPPlus, pero en VBA (y supongo que C# usaría el mismo principio) se usaría el siguiente código:

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 

hipervínculos son objetos que tienen una propiedad gama, así que mientras su El valor de la celda se puede cambiar al sobrescribir, el enlace se mantendrá. Editar la célula por un largo clic de ratón

Espero que esto ayude - buena suerte MikeD

+0

Gracias @MikeD. Estoy haciendo este lado del servidor usando EPPlus.La respuesta de Emmanuel anterior abordaba mi problema correctamente. – IEnumerator

73

Ésta es la otra forma de hacerlo:

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

he probado. Funciona bien.

+2

Ahhhhhhhhhhhh mucho más fácil que '\" "," \ "\" ?? "' +1 GRACIAS \! – ppumkin

+6

¡Gracias por esto! Tengo que establecer el valor después de hipervínculo porque de lo contrario veo la dirección en la celda, no el valor. – rpeshkov

+0

Tengo una excepción como No se puede encontrar la definición de hipervínculo para System._ComObject. He agregado la referencia EPPlus y no hay ningún error de compilación. Incluso estoy usando .net versión 4.0. ¿Alguien puede decirme el motivo de esta excepción de tiempo de ejecución? –

10

Hay algunas maneras de ir sobre él:

1) Para utilizar URI, a continuación, establezca un nombre legible por humanos

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

2) Para utilizar ExcelHyperlink y establecer un nombre legible por humanos usando objeto iniciador

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

3) Para utilizar = hipervínculo fórmula()

var cell = sheet.Cells["A1"]; 
cell.Formula = string.Format("HYPERLINK({0},{1})", "http://www.google.com", "Click me!"); 
cell.Calculate(); 
+0

¿Dónde puedo hacer referencia a ExcelHyperlink? – Muflix

+1

@Muflix Agregue una referencia a OfficeOpenXml – Cardin

+0

@Muflix La nueva clase debe ser ExcelHyperLink no ExcelHyperlink. Si agrega la referencia a OfficeOpenXml y arregla la carcasa en el nombre de la clase, funcionará. – Baxter

1

En base a las respuestas y documentación proporcionadas, pude crear un método de extensión que también trata con el formato adecuado de hipervínculo. Se crea un estilo llamado, si es necesario, y utilizar ese estilo para todos los hipervínculos siguientes:

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; 
    } 
} 

Sin el estilo, el hipervínculo se verá tan texto normal, si cell.Hyperlink = new Uri(url); se utiliza sin labrar explícita (aunque el cursor indicar correctamente que el texto es en realidad un texto de hipervínculo).

Cuestiones relacionadas