EPPluse сложная гиперссылка аварийного файла Excel - PullRequest
0 голосов
/ 26 октября 2018

Я использую библиотеку eppluse для создания отчетов в c #.
Отчеты содержат миллионы URL-адресов, которые я должен показывать в виде гиперссылок / кликабельных ссылок.
В настоящее время все работает, но некоторые URL-адреса нарушают мой Reports.xlsxфайл. Ошибка привязки в Excel

Пример кода:

for (var j = 0; j < values.Length; j++)
{
    // Format values before printing
    object cellValue = ParseString(values[j].Replace("\"", ""));

    // Check for urls and conver to hyperlinks
    if (cellValue.GetType().Name.ToLower() == "uri")
    {
        worksheet.Cells[i + 1, j + 1].Hyperlink = new ExcelHyperLink(Uri.EscapeUriString(cellValue.ToString().Replace("[", "%5B").Replace("]", "%5D"))) { Display = "Link" };
        worksheet.Cells[i + 1, j + 1].StyleName = hyperLinkStyle.Name;
    }
    else
    {
        worksheet.Cells[i + 1, j + 1].Value = cellValue;
    }
}

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Спасибо за помощь, следующее решение работало в данный момент.
Я не уверен, как долго оно работает, но в настоящее время работает без сбоев.

string url = Uri.EscapeUriString(cellValue.ToString().Replace("[", "%5B").Replace("]", "%5D"));
        if (cellValue.ToString().Length < 256)
        {
            worksheet.Cells[i + 1, j + 1].Formula = string.Format("HYPERLINK(\"{0}\",\"{1}\")", url, "Link");
        }
        else
        {
            worksheet.Cells[i + 1, j + 1].Hyperlink = new ExcelHyperLink(url) { Display = "Link" };
        }
0 голосов
/ 27 октября 2018

Я запустил твой код.В этом нет ничего плохого.Но повезло бы, что я сделал небольшую ошибку в приведенном ниже фрагменте для тестирования.Как и сейчас, он создает гиперссылку для каждой заполненной ячейки на листе.

for (int col = 1; col <= ws.Dimension.End.Column; col++)
{
    ws.Column(col).Width = ws.Column(col).Width + 1;

    for (var j = 1; j <= ws.Dimension.End.Row; j++)
    {
        ws.Cells[col, j].Hyperlink = new ExcelHyperLink(Uri.EscapeUriString("http://www.google.nl".Replace("[", "%5B").Replace("]", "%5D"))) { Display = "Link" };
    }
}

Но в первый раз я запустил этот фрагмент со следующим Cells[col + 1, j + 1].Это создало полностью заполненный лист Excel, поскольку в цикле он каждый раз сдвигался Dimension.End.Но когда лист был заполнен, он генерировал ту же ошибку, что и вы.Что лист был поврежден.

В заключение может показаться, что Excel или EPPlus не могут обрабатывать гиперссылки за определенным числом ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...