2009-02-23 6 views
7

Ist es möglich, ein Arbeitsblatt in Excel von Matlab zu öffnen und die Formeln zu bearbeiten? Die Idee besteht darin, eine Unsicherheitsanalyse zu automatisieren, indem ein zweites Blatt mit der Unsicherheit in jeder Zelle für den Wert aus der vorherigen Zelle erstellt wird. Im Wesentlichen möchte ich die Zellen als Variablen behandeln und SQRT (SUM (Partials (xi)^2)) für jede Zelle tun. Matlab sollte kein Problem mit dem Calc haben, aber kann es die Formeln in Blättern bearbeiten?Ändern Sie eine Excel-Tabelle von Matlab

Der Prozess ist derzeit Kopieren und Einfügen von Excel zu Matlab. Hier ist eine kleine Funktion, die die Unsicherheit in Matlab tut gegen auf Anordnung von Gleichungen:

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 

Als beiseite, sehen die Gleichungen so etwas wie diese (warum ich das nicht von Hand zu tun):

=(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

ich fragen, warum Sie sich für diese überhaupt Excel verwenden? Es ist nicht wirklich für eine solche wissenschaftliche Datenanalyse gedacht. Sie können die Daten besser in Textdateien exportieren, in MATLAB importieren, Ihre Ergebnisse berechnen und dann als Text speichern und wieder in Excel importieren. –

+1

David, es ist der 'Standard' in unserem Labor (Maschinenbau Labor). Ich stimme dem zu und halte die Dinge gerne rein in Matlab, wenn ich kann. Ich muss jedoch sagen, Excel hat seine Vorzüge. Wenn Sie zum Beispiel das Blatt "programmieren" lassen, während Sie Daten aufnehmen, können Sie einige schöne Echtzeit-Berechnungen/Visualisierungen durchführen. – ccook

Antwort

5

Sie sollten sie in der Lage sein zu tun, über COM/ActiveX/Automatisierung. Sehen Sie sich das Dokument External Interfaces an. Es gibt ein Beispiel für den Zugriff auf Excel-Dokumente über die Automatisierungsschnittstellen von Excel.

Ich habe Next-to-No-Erfahrung Excel auf diese Weise zu manipulieren, aber ich weiß, dass Sie fast alles in Excel durch Automatisierung tun können und das Bearbeiten von Zellenformeln klingt nicht so schwer.

edit: Ich kann nicht einen Verweis auf das Excel-Objektmodell finden, aber hier ist ein anderes Beispiel: http://support.microsoft.com/kb/301982

+0

Danke jason, das sieht vielversprechend aus. Es sieht so aus, als könnte ich der Arbeitsmappe ein zusätzliches Arbeitsblatt hinzufügen. – ccook

+0

Werfen Sie einen Blick auf http://www.mathworks.com/support/solutions/data/1-17PWC.html?solution=1-17PWC für ein Beispiel. – nimrodm

2

EDIT: Meine vorherige Annahme, dass XLSWRITE nicht funktionieren würde, war falsch. Ich habe gerade versucht, die folgend in MATLAB:

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

und wenn ich die Datei in Excel geöffnet, die Funktion war es in der Tat! Die Einschränkung wäre, dass Sie nur die Funktionen in Excel verwenden müssten.

Leider glaube ich nicht XLSREAD kann die Formeln in MATLAB lesen (es scheint nur das Ergebnis zu erhalten).

FRÜHER VORGESCHLAGENE OPTIONEN:

Sie können das Spreadsheet Link EX Software auf der MathWorks Website zu überprüfen, auch wenn ich ein wenig vertraut mit ihm und bin mir nicht sicher bin, ob auch das tun können, was Sie brauchen. Etwas anderes, auf das Sie achten sollten, ist MATLAB Builder EX, mit dem "Sie MATLAB®-Anwendungen als Makrofunktionen oder Add-Ins in die Excel®-Arbeitsmappen Ihres Unternehmens integrieren können". Klingt viel versprechend ...

+0

Scheint ähnlich zu einigen XLS-Lesemethoden, die ich in LabView verwendet habe ... hm. Überprüfen Sie den Link, ty – ccook

+0

Ich denke, das würde definitiv funktionieren, etwas von einer Preisschranke obwohl. Wenn ich keine freie Option finde, denke ich, dass ich mit dem, was wie der zweite aussieht, gehen werde. ty +1 – ccook

+0

Danke für das Update. Schade, das Lesen funktioniert nicht :( – ccook

2

Dies ist keine besonders elegante Lösung, aber wenn Sie eine neue .xls Tabelle speichern, die einfach eine tabulatorgetrennte (oder CSV) Datei ist, können Matlab Formeln generieren und Excel öffnet das Dokument Die Werte werden aufgefüllt.

In Perl habe ich es so etwas wie diese behandelt:

 
open(OUTPUT,'>tmpfile.xls'); 
print OUTPUT "1\t2\t=A1+B1\n"; 
close(OUTPUT); 

Und wenn tmpfile.xls in Excel geöffnet wird, Zelle C1 als 3 angezeigt werden, die dynamisch entsprechend aktualisiert wird, wenn A1 oder B1 geändert werden.

(Ich bin nicht gut mit Matlab, so habe ich keine Kenntnis von jeglicher Art von Plugins)

+0

zu klären, können Sie es als xls speichern und das wird die Gleichungen und nicht die Werte halten? – ccook

+0

Das ist richtig. Es ist definitiv janky, aber Excel wird Auto-Übersetzung und die Formeln zu halten. Wann im Zweifelsfall öffne es und speichere es dann als "echte" .xls :) (Ich fühle mich schrecklich, wenn ich das vorschlage) – kyle

+0

lol, 'janky' in der Tat. Aber es könnte der einfachste Weg sein, die Formeln zu bekommen. – ccook

2

Verwendung COM/ActiveX.Sie können eine Excel-Instanz über den folgenden Befehl öffnen:

xlApp = COM.Excel.Application; 

Dann eine Kombination aus Code-Vervollständigung verwenden und die VBA-Hilfe in Excel selbst, den Rest zu trainieren.

Denken Sie daran, Excel mit

xlApp.Quit; 
delete(xlApp); 

Auf einer Seite zur Kenntnis, so genannten CSE (Control-Umschalt-Eingabe) Formeln helfen kann zu schließen? Siehe Google.

+0

Benötigen Sie nicht etwas, das Ihrem ersten Befehl vorausgeht, um COM zu initiieren? Wenn Sie das tun, was ist der Befehl? – Hans

+0

Nein. Es sollte einfach funktionieren. – Nzbuu

+0

Das ist dasselbe wie xlApp = actxserver ('Excel.Application'); ? – Hans

Verwandte Themen