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
}
我得到了 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
}