Epplus 读取带有 html 片段 i 的超链接

Epplus read hyperlink with html fragment i

我得到了 Excel 个带有超链接的 xlsx 文档。 超链接有地址和子地址(这就是 VBA 调用 Html 片段的方式,都在 # 符号之后)

Epplus 库的每个单元格都有超链接 属性,但它只有 html 地址的第一部分,所以不是

whosebug.com#footer

我得到了:

whosebug.com

有什么方法可以用这个库读取 html 片段部分吗?

通过 epplus 读取超链接的代码:

        FileInfo xlsxFile = new FileInfo(_filePath);
        using (ExcelPackage pck = new ExcelPackage(xlsxFile))
        {
            var wb = pck.Workbook;
            if (wb == null)
                return null;

            var ws = wb.Worksheets.FirstOrDefault();
            ExcelRange er = ws.Cells[0,0];
            var hyperlink = er.Hyperlink;

这似乎是 excel 存储超链接的方式和 Epplus 读取它们的方式的问题。 Excel 将超链接存储在工作表本身以及工作表的关系文件中,该文件存储工作簿各部分(工作表、样式、字符串等)之间的任何类型的交叉引用。这一切都与基于 OpenOffice XML 标准的 xml xlsx 文件的结构有关:OpenOffice XML Info

所以问题是 Epplus 依赖于不包含片段的关系文件,而工作表 xml 中的“超链接”节点包含片段。如果您通过重命名将 xlsx 文件作为 zip 文件打开,您可以看到所有这些细节。

所以,简短的回答是您被迫使用单元格对象的“.Value”。不那么干净,但它会工作。例如,如果我像这样创建一个单元格:

使用此代码:

var fi = new FileInfo(@"c:\temp\Html_Fragment.xlsx");
using (var pck = new ExcelPackage(fi))
{
    var wb = pck.Workbook;
    var ws = wb.Worksheets.FirstOrDefault();
    ExcelRange er = ws.Cells[1,1];
    var hyperlink = er.Hyperlink;

    Console.WriteLine(er.Value);
    Console.WriteLine("{{Value: {0}, Hyperlink: {1}}}", er.Value, er.Hyperlink.AbsoluteUri);
}

给出这个:

{
 Value: https://msdn.microsoft.com/en-us/library/aa982683(v=office.12).aspx#Anchor_3, 
 Hyperlink: https://msdn.microsoft.com/en-us/library/aa982683(v=office.12).aspx
}