The link you provided actually had the correct solution, it wasn't well formatted in my oppinion though. A little tinkering got me the solution.
This is a "quick and dirty" hack thet will get you the hyperlink behind a cell. For easier comprehension i removed all error handling. A few try/catch blocks and null checks might be advisable in there.... ;)
public static string GetFullHyperlinkValue(SheetData sd, WorksheetPart wsp, string colIdx, int rowIdx)
{
// get all hyperlinks - you might want to store them ...
var hyperlinks = wsp.RootElement.Descendants<Hyperlinks>().First().Cast<Hyperlink>();
// get the cell at the address
Cell cell = sd.Descendants<Row>().FirstOrDefault(p => p.RowIndex != null && p.RowIndex == rowIdx).Descendants<Cell>().FirstOrDefault(p => p.CellReference != null && p.CellReference == $"{colIdx}{rowIdx}");
// get the Hyperlink object "behind" the cell
Hyperlink hyperlink = hyperlinks.SingleOrDefault(i => i.Reference.Value == cell.CellReference.Value);
// if the hyperlink has an anchor, the anchor will be stored without the # in hyperlink.Location
string location = hyperlink.Location;
// the URI is stored in the HyperlinkRelationship
HyperlinkRelationship hyperlinkRelationship = wsp.HyperlinkRelationships.SingleOrDefault(i => i.Id == hyperlink.Id);
var url = hyperlinkRelationship.Uri.ToString();
return string.IsNullOrWhiteSpace(location) ? url.ToString() : $"{url}#{location}";
}