Excel.Worksheet.Cells [row,col] ="= Formula"vs. Range.set_Value(Missing.Value,arrayFormulas)

Hei*_*ack 7 c# excel vba excel-vba

Excel.Worksheet.Cells[row,col] = "=Formula / reference" 
Run Code Online (Sandbox Code Playgroud)

在上面的Excel中更新公式/参考并在数据表中显示结果,在下面的代码中,当使用Range.set_Value(..)数据表时根本没有更新

string[,] myFormulas = new string[nrRows, nrColumns];
...
myFormulas [x,y] = e.g. "=SUM(D1:D" + rowNr + ")";
myFormulas [x,y+1] = e.g. "=Table1!A1";
...
Range.set_Value(Missing.Value, myFormulas)
Run Code Online (Sandbox Code Playgroud)

它只显示公式为字符串,例如=Table1!A1.

我不能让它更新.无论是CalucalteAll(),也不是RefreshAll(),也不是与任何关系.有关如何在数据表中实现更新的任何建议吗?

编辑:您可以使用单个语句设置整个数组Range.set_Value(Missing.Value, myFormulas).我的问题是如何让excel评估这个数组中的公式(而不是将它们视为简单的字符串,或者将Excel逐个设置为Excel而不是重新计算.)?

Pun*_*orn 13

我发现rangeVariable.Formula = rangeVariable.Value会将'公式作为文本'转换为真正的Excel公式,这是针对该范围内的所有单元格完成的.

Worksheet sheetOne = ...
int numberOfRows = 5000;

// Make a massive range on sheet 1, then use cell assignment by array for fastness
Range range = sheetOne.Range["A1"];
string[,] links = new string[numberOfRows+1, 1];
range = range.Resize[numberOfRows+1, 1];

for (int count = 0; count < numberOfRows; count++)
{
    // Build the =HYPERLINK formula to set as text in each cell
    string worksheet = "Sheet2";
    string cellRef = string.Format("A{0}", count + 1);
    string formula = string.Format("=HYPERLINK(\"#{0}!{1}\", \"{2}\")", worksheet, cellRef, string.Format("Hyperlink number {0}", count));

    links[count, 0] = formula;
}

//range.set_Item(Type.Missing, Type.Missing, links);
range.set_Value(Type.Missing, links) // thanks HeinrichStack
range.Formula = range.Value; //<--- Boom baby, all 'formula as text' turns into bona fide excel formula
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助