我传递给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}\")");
也许我使用的是不正确的旗帜或丢失的东西。
答案 0 :(得分: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]);
}
}
它可能性能稍差,但效果不错,可以被认为是一种有效的解决方案。