2009-02-23 14 views
7

Có thể mở một trang tính trong excel từ MATLAB và chỉnh sửa các công thức không? Ý tưởng là để tự động hóa một phân tích không chắc chắn bằng cách tạo ra một trang tính thứ hai với sự không chắc chắn trong mỗi ô cho giá trị từ ô trước đó. Về cơ bản, tôi muốn xử lý các ô như các biến và thực hiện SQRT (SUM (Partials (xi)^2)) cho mỗi ô. Matlab nên không có vấn đề với calc, nhưng nó có thể chỉnh sửa các công thức trong tờ?Sửa đổi một trang tính Excel từ Matlab

Quy trình hiện tại là sao chép và dán từ excel sang MATLAB. Dưới đây là một chức năng nhỏ mà không được sự không chắc chắn trong matlab chống lại trên hàng loạt các phương trình:

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 

Là một sang một bên, phương trình giống như thế này (tại sao tôi không làm điều này bằng tay):

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

tôi phải tự hỏi, tại sao bạn đang sử dụng Excel cho điều này ở tất cả? Nó không thực sự dành cho phân tích dữ liệu khoa học như thế này. Bạn có thể tốt hơn khi xuất dữ liệu ra tệp văn bản, nhập vào MATLAB, tính toán kết quả của bạn, sau đó lưu dưới dạng văn bản và nhập lại vào Excel. –

+1

David, đó là 'tiêu chuẩn' trong phòng thí nghiệm của chúng tôi (phòng thí nghiệm kỹ thuật cơ khí). Tôi đồng ý, và muốn giữ mọi thứ hoàn toàn trong MATLAB nếu tôi có thể. Tôi phải nói mặc dù, excel không có giá trị của nó. Ví dụ: có trang 'được lập trình' trong khi bạn lấy dữ liệu cung cấp cho một số tính toán/trực quan hóa thời gian thực tốt đẹp. – ccook

Trả lời

5

Bạn sẽ có thể làm điều đó thông qua COM/ActiveX/Tự động hóa. Nhìn vào tài liệu External Interfaces; có một ví dụ về cách truy cập tài liệu Excel thông qua giao diện Tự động hóa của Excel.

Tôi không có kinh nghiệm thao tác Excel theo cách này, nhưng tôi biết bạn có thể làm bất cứ thứ gì trong Excel thông qua Tự động hóa và chỉnh sửa công thức ô không khó.

sửa: Tôi không thể tìm thấy một tham chiếu đến các mô hình đối tượng Excel, nhưng đây là một ví dụ khác: http://support.microsoft.com/kb/301982

+0

Cảm ơn bạn jason, điều này có vẻ đầy hứa hẹn. Có vẻ như tôi cũng có thể thêm một trang tính bổ sung vào sổ làm việc. – ccook

+0

Hãy xem tại http://www.mathworks.com/support/solutions/data/1-17PWC.html?solution=1-17PWC để biết ví dụ. – nimrodm

2

EDIT: Giả định trước đây của tôi rằng XLSWRITE sẽ không hoạt động sai. Tôi vừa thử những điều sau đây trong MATLAB:

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

và khi tôi mở tệp ở excel, chức năng thực tế là ở đó! Giới hạn này sẽ là bạn chỉ phải sử dụng các hàm trong Excel.

Thật không may, tôi không tin XLSREAD có thể đọc các công thức thành MATLAB (dường như chỉ nhận được kết quả).

OPTIONS TRƯỚC ĐỀ NGHỊ:

Bạn có thể muốn kiểm tra phần mềm Spreadsheet Link EX trên trang web MathWorks, mặc dù tôi là một chút xa lạ với nó và không chắc chắn nếu thậm chí có thể làm những gì bạn cần. Một cái gì đó khác mà bạn nên xem xét là MATLAB Builder EX, "cho phép bạn tích hợp các ứng dụng MATLAB® vào sổ làm việc Excel® của tổ chức của bạn dưới dạng chức năng macro hoặc bổ trợ". Âm thanh đầy hứa hẹn ...

+0

Dường như một số phương pháp đọc XLS tôi đã sử dụng trong LabView ... hm. Kiểm tra các liên kết, ty – ccook

+0

Tôi nghĩ rằng những người chắc chắn sẽ làm việc, phần nào của một rào cản giá mặc dù. Nếu tôi không tìm thấy một lựa chọn miễn phí, tôi nghĩ rằng tôi sẽ đi với những gì trông giống như thứ hai. ty +1 – ccook

+0

Cảm ơn bạn đã cập nhật. Xấu hổ đọc không làm việc: ( – ccook

2

Đây không phải là giải pháp cực kỳ thanh lịch, nhưng nếu bạn lưu bảng tính mới .xls chỉ đơn giản là tệp được phân cách bằng tab (hoặc CSV), bạn có thể tạo Matlab công thức và khi Excel mở tài liệu các giá trị sẽ phổ biến.

Trong Perl, tôi đã xử lý nó một cái gì đó như thế này:

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

Và khi tmpfile.xls được mở trong Excel, tế bào C1 sẽ hiển thị như 3, sẽ tự động cập nhật một cách thích hợp nếu A1 hoặc B1 được thay đổi.

(Tôi không giỏi với Matlab, vì vậy tôi không có kiến ​​thức về bất kỳ loại plugin)

+0

để làm rõ, bạn có thể lưu nó như là một xls và đó sẽ giữ cho các phương trình và không phải là giá trị? – ccook

+0

Đó là chính xác.Nó chắc chắn janky, nhưng Excel sẽ làm tự động dịch và duy trì các công thức. nghi ngờ, mở nó và sau đó lưu nó như là "thực" .xls :) (Tôi cảm thấy khủng khiếp cho thấy điều này, mặc dù) – kyle

+0

lol, 'janky' thực sự. Nhưng nó có thể là cách dễ nhất để có được các công thức. – ccook

2

Sử dụng COM/ActiveX.Bạn có thể mở một ví dụ Excel qua lệnh sau:

xlApp = COM.Excel.Application; 

Sau đó sử dụng một sự kết hợp hoàn thành mã và sự giúp đỡ VBA trong Excel để làm việc ra phần còn lại.

Hãy nhớ đóng Excel với

xlApp.Quit; 
delete(xlApp); 

Trên một mặt lưu ý, cái gọi là CSE (Control-Shift-Enter) công thức có thể giúp đỡ? Xem Google.

+0

Bạn không cần cái gì đó trước lệnh đầu tiên của bạn để bắt đầu COM? Nếu bạn làm thế, lệnh là gì? – Hans

+0

Không. Nó chỉ hoạt động. – Nzbuu

+0

Có giống như xlApp = actxserver ('Excel.Application') hay không; ? – Hans