EPPluse复杂的超链接使Excel文件崩溃

时间:2018-10-26 06:20:21

标签: c# hyperlink epplus

我正在使用eppluse库在c#中创建报表。
报告包含数百万个URL,这些URL必须显示为超链接/可链接。
目前,一切正常,但是某些URL破坏了我的Reports.xlsx文件。 Error Snap in 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 :(得分:0)

我运行了您的代码。没有什么问题。但是很幸运,我在下面的代码片段中犯了一个小错误,无法进行测试。现在,它为工作表中的每个填充单元格创建一个超链接。

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都无法处理超出一定数量的超链接...

答案 1 :(得分:0)

非常感谢您提供的解决方案。
我不确定它能运行多长时间,但目前运行正常。

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