abh*_*rni 4 excel excel-formula array-formulas
我正在使用MATLAB程序在Excel工作表中写入值.我也在使用公式在单元格中写入值(例如,MATLAB程序写入=AVERAGE(A1:A10)
单元格并将其转换为适当的值(即,当我打开工作表时,我看不到上面的公式文本,而是值).
但是我在编写数组公式时遇到了麻烦(有花括号的公式).通常用户通过按Ctrl+ Shift+ Enter组合输入它们,出现花括号并计算适当的值.然而,当我用MATLAB程序编写用大括号括起来的公式时,不计算值,我只看到公式文本(用花括号围绕它).通过简单地将数组公式写入单元格,
我似乎无法模拟Ctrl+ Shift+ Enter效果.
这有什么解决方案吗?
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)