Изменение листа Excel из Matlab
можно ли открыть рабочий лист в excel из matlab и отредактировать формулы? Идея заключается в автоматизации анализа неопределенности путем создания второго листа с неопределенностью в каждой ячейке для значения из предыдущей ячейки. По сути, я хочу рассматривать ячейки как переменные и делать SQRT(SUM(Partials(xi)^2)) для каждой ячейки. Matlab не должен иметь проблем с calc, но может ли он редактировать формулы в листах?
в настоящее время процесс заключается в копировании и вставке из excel в matlab. Вот небольшая функция, которая делает неопределенность в matlab против массива уравнений:
function [f_u_total f_u] = uncertAnalysis(f, vars, vars_u)
f_u = [];
f_u_total = [];
for(i=1:length(f))
f(i)
item = uncertAnalysisi(f(i), vars, vars_u);
f_u = [f_u; item(1)];
f_u_total = [f_u_total; item(1)];
end
end
function [f_u_total f_u] = uncertAnalysisi(f, vars, vars_u)
f_u = [];
% take the partials and square them
for i=1:length(vars)
f_u = [f_u; vars(i) (diff(f, vars(i)).*vars_u(i)).^2];
end
% calculate the RSS
f_u_total = (sum(f_u(:,2))).^.5;
end
кроме того, уравнения выглядят примерно так (почему я не делаю это вручную):
=(9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^4/C!Y3^6/(C!U3^C!Z3)^6*F3^2+1/4*C!S3^2/C!V3^4*C!W3/(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*O3^2+1/4*C!S3^2/C!V3^4*C!W3/(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*P3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^4*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*Q3^2+1/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*S3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*C!Z3^2/C!U3^2*U3^2+4*C!S3^2/C!V3^6*C!W3*(C!O
3-C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*V3^2+1/4*C!S3^2/C!V3^4/C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*W3^2+1/4*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3^3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*X3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^8/(C!U3^C!Z3)^6*Y3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*LOG(C!U3)^2*Z3^2)^(1/2)
5 ответов
вы должны быть в состоянии сделать это через COM/ActiveX/Automation. Посмотри Внешние Интерфейсы document; есть пример того, как получить доступ к документам Excel через интерфейсы автоматизации Excel.
У меня нет опыта работы с Excel таким образом, но я знаю, что вы можете сделать почти все в Excel с помощью автоматизации и редактирования формул ячеек не так сложно.
edit: я не могу найти ссылку на объектную модель Excel, но вот еще один пример:http://support.microsoft.com/kb/301982
это не очень элегантное решение, но если вы сохраните новый .xls
электронная таблица, которая является просто файлом с разделителями табуляции (или CSV), вы можете создать формулы Matlab, и когда Excel откроет документ, значения будут заполняться.
в Perl я справился с этим примерно так:
open(OUTPUT,'>tmpfile.xls'); print OUTPUT "1\t2\t=A1+B1\n"; close(OUTPUT);
и когда tmpfile.xls
открывается в Excel, ячейки C1
будет отображаться как 3, который будет динамически обновляться, если A1
или B1
есть измененный.
(Я плохо разбираюсь в Matlab, поэтому у меня нет знаний о каких-либо плагинах)
EDIT: мое предыдущее предположение, что XLSWRITE не будет работать неправильно. Я просто попробовал следующее в MATLAB:
xlswrite('xltest.xls',{'1' '2' '=SUM(A1,B1)'});
и когда я открыл файл в excel, функция была на самом деле там! Ограничение на это будет заключаться в том, что вам придется использовать только функции, которые находятся в Excel.
к сожалению, я не верю XLSREAD можно прочитать формулы в MATLAB (кажется, просто получить результат).
ранее ПРЕДЛАГАЕМЫЕ ВАРИАНТЫ:
вы можете проверить электронная таблица ссылка EX программное обеспечение на веб-сайте MathWorks, хотя я немного не знаком с ним и не уверен, что даже это может сделать то, что вам нужно. Что-то еще, что вы должны посмотреть в Matlab Builder EX, который "позволяет интегрировать приложения MATLAB® в книги Excel® вашей организации в качестве макрофункций или надстроек". Звучит многообещающе...
используйте COM / ActiveX. Вы можете открыть экземпляр Excel с помощью следующей команды:
xlApp = COM.Excel.Application;
затем используйте комбинацию завершения кода и справки VBA в Excel для разработки остальных.
Не забудьте закрыть Excel с
xlApp.Quit;
delete(xlApp);
на боковой ноте могут помочь так называемые формулы CSE (Control-Shift-Enter)? См.Google.