在Excel表格中使用ClosedXML添加超链接

3

我正在将一个数据表格转换为 Excel,目前工作正常。数据表格中有 4 列,其中 Column1 和 Column2 是简单文本,Column3 和 Column4 是超链接URL和显示文本。使用以下代码,所有 4 列都是按原样导出到 Excel 中:

        string fileName = ConfigurationManager.AppSettings["filename"];
        string sheetName = System.IO.Path.GetFileNameWithoutExtension(fileName);
        using (XLWorkbook wb = new XLWorkbook())
        {               
            var ws = wb.Worksheets.Add(ptDataTable, sheetName);

            ws.Style.Font.FontName = "Arial";
            ws.Style.Font.FontSize = 10;
            ws.Style.Alignment.WrapText = true;
            ws.FirstRow().Style.Alignment.SetWrapText(true);

            ws.Style.Alignment.SetWrapText(true);
            ws.Style.Alignment.SetShrinkToFit(true);
            ws.Style.Alignment.Vertical = XLAlignmentVerticalValues.Top;
            ws.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
            ws.Rows().AdjustToContents();
            ws.Columns().AdjustToContents();

            ws.Rows(2,200).Style.Fill.SetBackgroundColor((XLColor.Transparent));
            ws.Columns(9, 10).Width = 50.0;
            ws.Range("A2:J200").Style.Border.SetInsideBorder(XLBorderStyleValues.Thin);
            ws.Range("A2:J200").Style.Border.SetOutsideBorder(XLBorderStyleValues.Thin);


            using (MemoryStream stream = new MemoryStream())
            {
                wb.SaveAs(stream);
                return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);
            }
        }

我想创建一个带有第三列(网址)和第四列(显示文本)的超链接,并且该超链接将成为导出到Excel中的第三列。 您有什么好的想法吗?
4个回答

8

我不想循环遍历单元格,因为这会耗费时间。 - Always_a_learner
1
如果你想使用ClosedXML来完成它,那就只有这一个选项。 - Francois Botha

3

如果我没记错的话,你的代码是使用ClosedXML库而不是OpenXMLSDK。

在OpenXMLSDK中有两种方法添加超链接:


2
< p > < code > Francois Botha 的答案可以解决问题,但是对于大量的超链接(成千上万个),速度相对较慢,因为每个超链接的生成需要几毫秒时间。

另一种好的选择是使用公式生成超链接:

cell.FormulaA1 = $"=HYPERLINK(\"{url}\", \"{text}\")";

使用这种方法的函数还可以确保在Codidact上找到有效的超链接值。

1
这种方法的一个缺点是,你失去了工具提示的选项。 - Tom Lint

1

关于@Francois Botha之前的解决方案,它不需要太多的代码。

例如,在VB.NET中,我只是使用以下代码将包含URL的字符串列(已从我的SQLServer数据库查询的结果DataTable中填充)转换为可点击的链接:

    For Each wsrow In wc.Rows
        'Was: wsrow.Cell("G").Hyperlink = New XLHyperlink(wsrow.Cell("G"))
         wsrow.Cell("G").SetHyperlink(New XLHyperlink(url))
    Next

更新:不,那似乎可以工作-高亮URL-但链接内容为空:(*

*我昨天尝试升级ClosedXML,但它破坏了一些必要的现有代码,并且图像显示功能对我不起作用-我没有足够的时间进一步处理它。


尝试更新 Closed XML。将上面的中间行更改如下所示,可以构建它(但尚未完全测试):wsrow.Cell("H").SetHyperlink(New XLHyperlink(url2))。 - Zeek2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接