【问题标题】:How to add a hyperlink in Excel DNA with SetValue?如何使用 SetValue 在 Excel DNA 中添加超链接?
【发布时间】:2018-06-08 21:31:38
【问题描述】:

我传递给 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}\")");

也许我使用了不正确的标志或遗漏了一些东西。

【问题讨论】:

    标签: c# excel hyperlink excel-dna


    【解决方案1】:

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

       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]);
          }
       }
    

    它的性能可能稍差,但运行良好,足以被视为有效的解决方案。

    【讨论】:

    • 这需要我添加“Microsoft.Office.Interop.Excel”。
    猜你喜欢
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    相关资源
    最近更新 更多