Excel.Worksheet.Cells =“=公式”与Range.set_Value(Missing.Value,arrayFormulas)

Excel.Worksheet.Cells[row,col] = "=Formula / reference" 

在上面的Excel中更新公式/参考,并在数据表中显示结果,在下面的代码中,当使用Range.set_Value(..) ,数据表完全不会更新

 string[,] myFormulas = new string[nrRows, nrColumns]; ... myFormulas [x,y] = eg "=SUM(D1:D" + rowNr + ")"; myFormulas [x,y+1] = eg "=Table1!A1"; ... Range.set_Value(Missing.Value, myFormulas) 

它只显示公式为string,例如=Table1!A1

我无法更新。 无论是CalucalteAll() ,也不是与RefreshAll() ,也不是。 任何build议如何实现数据表中的更新?

编辑:您可以使用单个语句Range.set_Value(Missing.Value, myFormulas)设置整个数组。 我的问题是如何使excel评估这个数组中的公式(而不是把它们当作简单的string,或者把Excel中的单元格重新计算一个一个地设置)。

我发现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 

希望这可以帮助

我不认为有任何方法来设置任何给定单元格的Formula值,除了有意地为它设置Formula属性,一次一个单元格。

看看这里的属性和例子

所以我认为你需要做的是更像这样的事情:

 Worksheet.Cells[x,y].Formula = "=SUM(D1:D" + rowNr + ")"; Worksheet.Cells[x,y+1].Formula = "=Table1!A1"; 

刚才我刚刚遇到这个问题,几乎整天都在寻找解决办法,但没有运气。

我终于find了解决scheme,当试图解决另一个问题也涉及到单元格数据types,其中你应该设置你的2维数组'对象'types而不是'string'types。 问题的原因,在我看来,是公式属性(也是Value,Value2)自动写入的数据取决于代码中的数据types。 代码应该是这样的:

 Worksheet sampleSheet = ...; object[,] dataArr = new object[rowNum,colNum]; for (int i = 0; i < rowNum; i+=1) { for (int j = 0; j < colNum; j+=1) { dataArr[i,j] = "=SUM(..<something here>..)"; } } sampleSheet.Range[....].Formula = dataArr; 

希望这个帮助!