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

标签 c# html excel epplus

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

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

stackoverflow.com#footer

我得到了:

stackoverflow.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 将超链接存储在工作表本身以及工作表的关系文件中,该文件是存储工作簿部分(工作表、样式、字符串等)之间任何类型的交叉引用的文件。这一切都与 xlsx 文件的结构有关,该文件是基于 OpenOffice XML 标准的 xml:OpenOffice XML Info

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

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

Excel with URL+Fragment

使用此代码:

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
}

关于c# - Epplus读取带有html片段的超链接i,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32970864/

相关文章:

r - 如何在 r studio 中的多个 Excel 工作表上使用脚本

excel - 通讯错误?两次打开工作簿会导致引用损坏

vba - 剪切粘贴某行数据

c# - 查找数组中最常见的元素

c# - 在启用 LowercaseUrls 的情况下在路由参数中保留大小写

c# - ASP.NET MVC 中的 Task.Run 与 ContinueWith

html - 如何将内容放入div

iphone - 位置 :fixed ios 6. 1 在定义视口(viewport)元标记时不起作用

c# - 从 tfs 获取最新信息,然后从批处理文件构建解决方案

html - 如何在 Clarity <clr-dg-footer> 中左对齐一些内容