是否可以在matlab中打开Excel中的工作表并编辑公式?这个想法是通过创建第二张表来自动化不确定性分析,其中每个单元格中的不确定性来自前一个单元格的值。基本上,我想将单元格视为变量,并为每个单元格执行SQRT(SUM(Partials(xi)^ 2))。 matlab应该没有问题,但它可以编辑表格中的公式吗?
目前的过程是从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)
答案 0 :(得分:5)
您应该可以通过COM / ActiveX / Automation来完成。查看External Interfaces文档;有一个如何通过Excel的自动化界面访问Excel文档的示例。
我以这种方式操作Excel几乎没有经验,但我知道你可以通过自动化在Excel中做任何事情,编辑单元格公式听起来并不那么难。
编辑:我找不到Excel对象模型的引用,但这是另一个例子:http://support.microsoft.com/kb/301982
答案 1 :(得分:2)
xlswrite('xltest.xls',{'1' '2' '=SUM(A1,B1)'});
当我在excel中打开文件时,该功能实际上就在那里!对此的限制是您必须只使用Excel中的函数。
不幸的是,我不相信XLSREAD可以将公式读入MATLAB(它似乎只是得到了结果)。
以前建议的选项:
您可能想要查看MathWorks网站上的Spreadsheet Link EX软件,虽然我对它有点不熟悉,但我不确定是否可以满足您的需求。您应该研究的其他内容是MATLAB Builder EX,它“允许您将MATLAB®应用程序作为宏函数或加载项集成到组织的Excel®工作簿中”。听起来很有希望......
答案 2 :(得分:2)
这不是一个非常优雅的解决方案,但如果您保存一个新的.xls
电子表格,它只是一个制表符分隔(或CSV)文件,您可以让Matlab生成公式,当Excel打开文档时,值将填充。
在Perl中,我处理过类似的事情:
open(OUTPUT,'>tmpfile.xls'); print OUTPUT "1\t2\t=A1+B1\n"; close(OUTPUT);
在Excel中打开tmpfile.xls
时,单元格C1
将显示为3,如果A1
或B1
发生更改,则会动态更新。
(我对Matlab并不擅长,所以我不知道任何插件)
答案 3 :(得分:2)
使用COM / ActiveX。您可以通过以下命令打开Excel实例:
xlApp = COM.Excel.Application;
然后在Excel中使用代码完成和VBA帮助的组合来完成剩下的工作。
请记得使用
关闭ExcelxlApp.Quit;
delete(xlApp);
另外,所谓的CSE(Control-Shift-Enter)公式可能会有所帮助吗?请参阅Google。
答案 4 :(得分:1)
作为替代方案,请参阅下面的代码(xlswrite)以使用Matlab中的ActiveX: