2017-12-28 45 views
0

하나는 하이퍼 링크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); 
      }); 
    } 

어떻게 평가할 수 있습니까?


여러 가지 시도를했지만 작동하지 않았습니다. 예 :

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

어쩌면 잘못된 플래그를 사용하거나 누락되었습니다.

답변

0

나는 그것을 고치기 위해 몇 가지 방법을 찾았지만 모든 것이 기대했던대로 작동하는 것은 아닙니다. 즉, 셀 수식 값을 대신 호출하는 것으로 나타났습니다.

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

성능이 약간 떨어지지 만 유효한 해결책으로 간주 될만큼 잘 작동합니다.

+0

"Microsoft.Office.Interop.Excel"을 추가해야했습니다. – Margus