无法以编程方式计算Excel数组公式

abh*_*rni 4 excel excel-formula array-formulas

我正在使用MATLAB程序在Excel工作表中写入值.我也在使用公式在单元格中写入值(例如,MATLAB程序写入=AVERAGE(A1:A10)单元格并将其转换为适当的值(即,当我打开工作表时,我看不到上面的公式文本,而是值).

但是我在编写数组公式时遇到了麻烦(有花括号的公式).通常用户通过按Ctrl+ Shift+ Enter组合输入它们,出现花括号并计算适当的值.然而,当我用MATLAB程序编写用大括号括起来的公式时,不计算值,我只看到公式文本(用花括号围绕它).通过简单地将数组公式写入单元格,
我似乎无法模拟Ctrl+ Shift+ Enter效果.

这有什么解决方案吗?

dan*_*rak 5

Excel自动转换以=into 开头的值.formulas.要保存数组公式,您需要直接写入FormulaArray范围的属性.

更多细节:

如果您使用的是普通公式,则VBA中有两个选项.您可以像这样设置单元格的值或公式属性:

Range("A3").value = "=Sum(A1:A2)"
Range("A3").Formula= "=Sum(A1:A2)" 
Run Code Online (Sandbox Code Playgroud)

使用数组公式时,您无法使用这些方法中的任何一种,您需要将其存储到单元格的不同区域:

Range("A3").FormulaArray = "=Sum(A1:A2)"
Run Code Online (Sandbox Code Playgroud)

当用户按下Ctrl+ Shift+时,Enter他们告诉excel .value将单元格发送到.FormulaArray细胞的一部分.

否则,在默认情况下,当Excel可以看到的=迹象我分配.value.formula

无论如何,这都是相对于excel对象模型,即使它在VBA中.

既然我已经进入了这个细节,我相信matlab的xlswrite函数只写入单元格的值,并且不能写入这个子属性,我可能是错的.

这可能在MATLAB中有用(未经测试)

mlrange='A3'; % or similar

Excel = actxserver ('Excel.Application');
Excel.Workbooks.Open(filename);
TargetSheet = get(Excel.sheets,'item','A');
TargetSheet.Activate
ran = Excel.Activesheet.get('Range',mlrange);
ran.FormulaArray = '=Sum(A1:A2)'
Run Code Online (Sandbox Code Playgroud)