EPPlus

2011-10-03 16 views
30

kullanarak hücrenin içinde bir bağlantı oluşturma Bağlantı metnini içeren hücre yerine EPPlus kullanarak bir hücrenin içine Köprü yazmanın nasıl çalıştığını anlamaya çalışıyorum. Bir bağlantı olarak tanınması ve tıklanabilir olması gerekiyor.EPPlus

Herhangi bir yardım için teşekkür ederiz.

+0

** = HYPERLINK() ** formülünü kullanamaz mısınız? –

+0

** workheet.Cells'i denediniz mi? [I, j] .Hyperlink ** = yeni Uri (localfilepath)? –

+0

@TimWilliams, veriler bir veri kümesinden yüklendiğinden çalışmaz. – IEnumerator

cevap

18

Aşağıdaki kod benimle iyi çalıştı iyi şanslar - Uzun fare tarafından hücre bu yardımcı olur

Umut tıklayın düzenleyin.

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

Umarım bu size yardımcı olur.

Mutlu kodlama! Ben test ettik

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

:

+0

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

+1

Neden "String.Format (@" HYPERLINK ("" {0} "", "" {1} "") ", FileRootPath, DisplayText)';) – Pakman

+2

Benim için HYPERLINK işlevi nedeniyle evrensel bir çözüm gibi görünmüyor MS Excel'in ingilizce olmayan sürümleri için çalışmıyor. Bu açıdan Han'ın cevabı daha iyidir. –

1

Ben EPPlus biliyorum ama VBA (ve C# aynı ilkeyi kullanmak istiyorsunuz sanırım) şu kodu kullanırsınız yoktur: Köprüler ederken böylece, bir dizi özelliği olan nesnelerdir

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 

senin hücre değeri aşırıya kaçarak değiştirilebilir, bağlantı kalır. Miked

+0

Teşekkürler @MikeD. EPPlus kullanarak bu sunucu tarafında yapıyorum.Emmanuel'in cevabı, sorunumu doğru bir şekilde ele aldı. – IEnumerator

73

Bu yapmak için başka bir yoldur. İyi çalışıyor.

+2

Ahhhhhhhhhhhh '\" "," \ "\" ?? "' +1 THANKS \ 'den daha kolay! – ppumkin

+6

Bunun için teşekkürler! Hyperlink'ten sonra Value ayarlamam gerekiyor, aksi halde hücre içindeki adresi değil, değeri görüyorum. – rpeshkov

+0

Sistem._ComObject için Köprü tanımını bulamıyor gibi bir özel durum var. EPPlus referansını ekledim ve derleme hatası yok. Hatta .net sürüm 4.0 kullanıyorum. Bu çalışma zamanı istisnasının nedenini bana söyleyebilir mi? –

10

bu konuda gitmek için birkaç yol vardır:

1) URI kullanmak için daha sonra ExcelHyperlink kullanmak için bir insan tarafından okunabilir adı

var cell = sheet.Cells["A1"]; 
cell.Hyperlink = new Uri("http://www.google.com"); 
cell.Value = "Click me!"; 
) ayarlayabilir ve nesne başlatıcı kullanılarak bir insan okunabilir adını ayarlamak

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

3) = Köprü() aşağıdaki formüle kullanmak için

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

ExcelHyperlink'e nereden başvurabilirim? – Muflix

+1

@Muflix OfficeOpenXml için bir başvuru ekleyin – Cardin

+0

@Muflix Yeni sınıf ExcelHyperLink ExcelHyperlink olmamalıdır. Başvuruyu OfficeOpenXml'ye eklerseniz ve gövdeyi sınıf adı üzerinde sabitlerseniz, bu iş işe yarayacaktır. – Baxter

1

Verilen yanıtlara ve belgelere dayanarak, düzgün bir köprü biçimlendirmesiyle de ilgilenen bir uzantı yöntemi oluşturabiliyordum. cell.Hyperlink = new Uri(url); (açık stil olmadan kullanılırsa rağmen imleç olacak, köprü, sadece normal metin olarak bakacağız stil olmadan

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

: Bu gerekirse, adlandırılmış stili oluşturur ve sonraki tüm köprüler için bu stili kullanmak Metnin aslında bir köprü metni olduğunu doğru bir şekilde belirtin).

İlgili konular