4

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

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

有什么解决办法吗?

4

1 回答 1

5

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

更多细节:

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

Range("A3").value = "=Sum(A1:A2)"
Range("A3").Formula= "=Sum(A1:A2)" 

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

Range("A3").FormulaArray = "=Sum(A1:A2)"

当用户按下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)'
于 2012-09-21T19:27:49.260 回答