从Matlab修改一个Excel工作表

是否有可能在Excel中打开一个工作表从matlab和编辑公式? 这个想法是通过在每个单元格中创build第二个表格来确定前一个单元格的值,从而实现不确定性分析的自动化。 实质上,我想把单元格当作variables,并对每个单元格做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) 

你应该可以通过COM / ActiveX / Automation来完成。 看看外部接口文件; 有一个如何通过Excel的自动化接口访问Excel文档的例子。

我有这样的经验操作Excel的经验,但我知道你可以通过自动化在Excel中做任何事情,编辑单元格公式听起来并不困难。

编辑:我找不到Excel对象模型的引用,但这里是另一个示例: http : //support.microsoft.com/kb/301982

这不是一个非常优雅的解决scheme,但是如果您保存一个新的.xls电子表格,它只是一个制表符分隔(或CSV)文件,您可以使用Matlab生成公式,而当Excel打开文档时,这些值将会填充。

在Perl中,我处理过这样的事情:

开放(OUTPUT, '> tmpfile.xls');
打印OUTPUT“1 \ t2 \ t = A1 + B1 \ n”;
closures(OUTPUT);

并且,在Excel中打开tmpfile.xls时,单元格C1将显示为3,如果更改了A1B1 ,则会正确dynamic更新。

(我不擅长Matlab,所以我不知道任何插件)

编辑:我以前的假设, XLSWRITE不会工作是错误的。 我只是在MATLAB中尝试了以下内容:

 xlswrite('xltest.xls',{'1' '2' '=SUM(A1,B1)'}); 

当我用excel打开文件的时候,function实际上就在那里! 这个限制就是你只能使用Excel中的函数。

不幸的是,我不相信XLSREAD可以将公式读入MATLAB(看起来只是得到结果)。

以前build议的选项:

您可能想要查看MathWorks网站上的Spreadsheet Link EX软件,虽然我对此有点不熟悉,不确定是否可以做到您需要的。 您应该看看的其他东西是MATLAB Builder EX ,它可以让您将MATLAB®应用程序作为macrosfunction或加载项集成到组织的Excel®工作簿中。 听起来很有希望

使用COM / ActiveX。 您可以通过以下命令打开Excel实例:

 xlApp = COM.Excel.Application; 

然后结合使用代码完成和Excel中的VBA帮助来解决其余问题。

请记住closuresExcel

 xlApp.Quit; delete(xlApp); 

在旁注中,所谓的CSE(Control-Shift-Enter)公式可能有帮助吗? 请参阅Google 。

作为替代方法,请参阅下面的代码(xlswrite)以使用Matlab中的ActiveX:

http://www.mathworks.com/matlabcentral/fileexchange/2855