如何使用SetValue在Excel DNA中添加超链接?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用SetValue在Excel DNA中添加超链接?相关的知识,希望对你有一定的参考价值。

我传递给Excel的+60列之一是一个超链接

   private object GetApplicationUrl(int id)
   {
      var environmentUri = _configurationManager.Default.AppSettings["EnvironmentUri"];
      return $"=HYPERLINK("{environmentUri}://TradingObject={id}/", "{id}");";
   }

这解决了外部协议并在另一个应用程序中打开特定交易。这有效,但最初,超链接公式未经评估,迫使用户首先评估它。我使用对象数组:

   protected void SetRange(object[,] range, int rows, int columns, ExcelCell start = null)
   {
      start = start ?? GetCurrentCell();
      ExcelAsyncUtil.QueueAsMacro(
          () =>
          {
             var data = new ExcelReference(start.Row, start.Row + (rows - 1), start.Column, start.Column + (columns - 1));
             data.SetValue(range);
          });
   }

我如何强制excel评估它?


我尝试了几件事,但他们没有用。例如:

return XlCall.Excel(
   XlCall.xlcCalculateNow, 
   $"HYPERLINK("{environmentUri}://TradingObject={id}/", "{id}")");

也许我使用的是不正确的旗帜或丢失的东西。

答案

我找到了几种方法来修复它,但并非所有方法都按预期工作。简而言之,我想出了调用单元格公式值。

   private void SetFormulaColumn(List<int> ids, ExcelCell cell)
   {
      var wSheet = ((Application)ExcelDnaUtil.Application).ActiveWorkbook.ActiveSheet;
      for (var i = 0; i < ids.Count; i++)
      {
         wSheet.Cells(cell.Row + i, cell.Column).Formula = GetApplicationUrl(ids[i]);
      }
   }

它的性能可能稍差,但效果很好,可以被认为是一种有效的解决方案。

以上是关于如何使用SetValue在Excel DNA中添加超链接?的主要内容,如果未能解决你的问题,请参考以下文章

将 Excel-DNA 与 VS2005 一起使用

Excel-DNA项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制C#版

Excel-DNA项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制VB.Net版

使用 Excel DNA 将用 F# 编写的用户定义函数导入 VBA 子例程

Excel DNA 垂直调整返回数组的大小

如何在 Excel 用户定义函数中写入数组