web-dev-qa-db-ja.com

EPPlusを使用してセル内にリンクを作成する方法

リンクテキストを含むセルの代わりにEPPlusを使用して、セル内にハイパーリンクを書き込む方法を理解しようとしています。リンクとして認識され、クリック可能である必要があります。

どんな助けでもありがたいです。

45
IEnumerator

以下のコードは私でうまくいきました。

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

これがお役に立てば幸いです。

ハッピーコーディング!!

24
Bell

これは別の方法です:

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

私はテストしました。正常に動作します。

96
Han

それを行うにはいくつかの方法があります:

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)= Hyperlink()式を使用するには

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

提供された回答とドキュメントに基づいて、適切なハイパーリンクのフォーマットも処理する拡張メソッドを作成できました。必要に応じて名前付きスタイルを作成し、後続のすべてのハイパーリンクにそのスタイルを使用します。

_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);が明示的なスタイルなしで使用された場合、ハイパーリンクは通常のテキストと同じように見えます(ただし、カーソルはテキストが実際にハイパーリンクテキストであることを正しく示します)。

2
Alexei

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

1
MikeD

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
SouXin