【问题标题】:Trouble computing Excel array formulas programmatically以编程方式计算 Excel 数组公式时遇到问题
【发布时间】:2012-09-14 05:56:40
【问题描述】:

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

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

有什么解决办法吗?

【问题讨论】:

    标签: excel excel-formula array-formulas


    【解决方案1】:

    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 发送到 .@ 987654327@ 单元格的部分。

    否则默认情况下,当 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)'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2016-09-04
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多