Гиперссылка EPPlus на ячейку на другом листе

я борюсь с добавлением гиперссылок в другой список в мой сгенерированный файл excel. Я пробовал это так:

ws.Cells[1, 1].Formula="HYPERLINK(\"[#]'sheetName'!R4C1\";\"linktext\")"
ws.Cells[1, 1].Formula="HYPERLINK(\"#'sheetName'!R4C1\";\"linktext\")"
ws.Cells[1, 1].FormulaR1C1="HYPERLINK(\"[#]'sheetName'!R4C1\";\"linktext\")"
ws.Cells[1, 1].FormulaR1C1="HYPERLINK(\"#'sheetName'!R4C1\";\"linktext\")"

После открытия сгенерированного файла excel в excel 365 (полное автономное приложение) я просто получаю сообщение о том, что в файле есть ошибки, и все ячейки, в которых я использовал эту формулу гиперссылки, пусты.

Сообщение об ошибке:

we found a problem with some content in FILENAME do you want us to try to recover as much as we can

Как заставить это работать?

Также, когда я помещаю ту же формулу в ячейку вручную, она работает.

Полный код:

using OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ExcelHyperlinkTest
{
    class Program
    {
        static void Main(string[] args)
        {
            MemoryStream excelStream = new MemoryStream();
            ExcelPackage excelFile = new ExcelPackage(excelStream);

            ExcelWorksheet wsSrc = excelFile.Workbook.Worksheets.Add("src");
            ExcelWorksheet wsTgt = excelFile.Workbook.Worksheets.Add("tgt");

            wsSrc.Cells[1, 1].Formula = string.Format("HYPERLINK(\"#'{0}'!R{1}C{2}\";\"{3}\")", "tgt", 2, 5, "test"); //FormulaR1C1

            excelFile.Save();
            excelStream.Position = 0;

            using (FileStream file = new FileStream("c:\\linkTest.xlsx", FileMode.Create, System.IO.FileAccess.Write))
            {
                byte[] bytes = new byte[excelStream.Length];
                excelStream.Read(bytes, 0, (int)excelStream.Length);
                file.Write(bytes, 0, bytes.Length);
                excelStream.Close();
            }
        }
    }
}

person Evlo    schedule 24.01.2017    source источник


Ответы (3)


Это работает

wsSrc.Cells[1, 6].Value = "test3";
            Uri url = new Uri("#'tgt'!B5", UriKind.Relative);
            wsSrc.Cells[1, 6].Hyperlink = url;
person Evlo    schedule 25.01.2017

Если лист существует в том же файле excel и какой-либо другой, использующий библиотеку EPPlus, им может помочь следующий код:

int rowCount=<your specific row> 
ws.Cells[rowCount, 6].Hyperlink = new ExcelHyperLink((char)39 + "Name of your sheet" + 
(char)39 + "!A1(specific cell on that sheet)", "Link text");
person Mahfuzur Rahman    schedule 26.03.2019

Это будет ссылаться на B5 на листе (sheetName) в рабочей книге (workbookPath) относительно текущей рабочей книги и форматирует ссылку как гиперссылку.

using (ExcelRange rng = xlsheetSummary.Cells[1, 1])
{
    var namedStyle = xlsheetSummary.Workbook.Styles.NamedStyles.FirstOrDefault(o=> o.Name == "HyperLink");

    namedStyle.Style.Font.UnderLine = true;
    rng.StyleName = namedStyle.Name;

    rng.Value = ws.Name;
    Uri link = new Uri($"{workbookPath}#'{sheetName}'!B5", UriKind.Relative);
    namedStyle.Style.Font.Color.SetColor(Color.Blue);                                 
    rng.Hyperlink = link;
}

person Arthur Russell Fox    schedule 27.08.2019