Comment créer un lien à l'intérieur d'une cellule en utilisant EPPlus
j'essaie de comprendre comment écrire un lien hypertexte à l'intérieur d'une cellule en utilisant EPPlus au lieu de la cellule contenant le texte du lien. J'ai besoin qu'il soit reconnu comme un lien et être cliquable.
Toute aide est appréciée.
6 réponses
Le code ci-dessous a bien fonctionné avec moi.
string FileRootPath = "http://www.google.com";
_Worksheet.Cells[intCellNumber, 1].Formula = "HYPERLINK(\"" + FileRootPath + "\",\"" + DisplayText + "\")";
j'espère que cela peut vous aider.
bon codage!!
C'est l'autre façon de faire:
var cell = sheet.Cells["A1"];
cell.Hyperlink = new Uri("http://www.google.com");
cell.Value = "Click me!";
j'ai testé. Il fonctionne très bien.
Il y a plusieurs façons d'aller à ce sujet:
1) pour utiliser URI, définissez alors un nom lisible par l'homme
var cell = sheet.Cells["A1"];
cell.Hyperlink = new Uri("http://www.google.com");
cell.Value = "Click me!";
2) pour utiliser ExcelHyperlink et définir un nom humainement lisible en utilisant object initializer
var cell = sheet.Cells["A1"];
cell.Hyperlink = new ExcelHyperlink("http://www.google.com") { Display = "Click me! };
3) À utiliser =lien Hypertexte() formule
var cell = sheet.Cells["A1"];
cell.Formula = string.Format("HYPERLINK({0},{1})", "http://www.google.com", "Click me!");
cell.Calculate();
sur la base des réponses fournies et de la documentation, j'ai pu créer une méthode d'extension qui traite également du formatage approprié des hyperliens. Il crée un style nommé, si nécessaire, et utiliser ce style pour tous les liens hypertexte:
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;
}
}
sans le style, l'hyperlien aura l'air d'un texte normal, si cell.Hyperlink = new Uri(url);
est utilisé sans Style explicite (bien que le curseur indique correctement que le texte est en fait un lien hypertexte).
je ne sais pas EPPlus, mais en VBA (et je suppose que C# utilise le même principe), vous utilisez le code suivant:
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
les hyperliens sont des objets ayant une propriété de portée, donc alors que votre valeur de cellule peut être changée par overtyping, le lien restera. Éditez la cellule par un clic de souris long
Espérons que cette aide - bonne chance MikeD
si vous utilisez EPPlus et que vous voulez créer un lien vers une autre feuille dans le même document, alors c'est la bonne façon de faire:
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");
}
C'est la bonne façon de créer un lien vers une autre feuille dans le document Excel. Avoir l'aide de la formule HYPERLINK
fonction, si un fichier est téléchargé sur le client, la dernière version Excel soulèvera les avertissements de sécurité.