我得到了带有超链接的 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”。不是那么干净,但它会起作用。例如,如果我创建一个像这样的单元格:
使用此代码:
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/