Проблемы с программным вычислением формул массива Excel

Я пишу значения на листе Excel, используя программу MATLAB. Я также пишу значения в ячейках, используя формулы (например, программа MATLAB записывает =AVERAGE(A1:A10) в ячейку, и это преобразуется в соответствующее значение (т.е. когда я открываю лист, я не вижу приведенный выше текст формулы, а значение).

Однако у меня возникают проблемы с написанием формул массива (с фигурными скобками вокруг). Обычно пользователь вводит их, нажимая комбинацию Ctrl+Shift+Enter, появляются фигурные скобки и вычисляется соответствующее значение. Однако, когда я пишу эти формулы, заключенные в фигурные скобки из программы MATLAB, значение не вычисляется, я просто вижу текст формулы (с фигурными скобками вокруг него).
Кажется, я не могу смоделировать Ctrl< /kbd>+Shift+Введите эффект, просто написав формулу массива в ячейку.

Есть ли какое-нибудь решение для этого?


person abhinavkulkarni    schedule 21.09.2012    source источник


Ответы (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 ячейки в раздел .FormulaArray ячейки.

В противном случае по умолчанию, когда Excel видит знак =, я назначаю .value .formula

В любом случае, это все относительно объектной модели Excel, даже если она находится в VBA.

Теперь, когда я углубился в эту деталь, я считаю, что функция xlswrite Matlab записывает только значение ячеек и не может писать в это подсвойство, я могу ошибаться.

Что-то вроде этого может работать в 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)'
person danielpiestrak    schedule 21.09.2012