我正在使用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;
}
}
答案 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" };
}