2012-08-08 334 views
0

我有一個現有的(打開和空的)文件「D:\ api.xlsx」,需要與Matlab通信。 首先,我嘗試從A1讀值:B2,並插入新的價值觀:Matlab與Excel之間的actxserver通信

excelapp = actxserver('Excel.Application'); 
wkbk = excelapp.Workbooks; 
wdata = wkbk.Open('D:\api.xlsx'); 
sheet = wdata.ActiveSheet; 
range = sheet.get('Range', 'A1:B2'); 
range.Value 
ans = 

    [NaN] [NaN] 
    [NaN] [NaN] 

range.Value = magic(2); 
>> range.Value 

ans = 

    [1] [3] 
    [4] [2] 

但我不認爲在Excel中的變化。範圍A1:B2保持空白。 同樣,當我手動將新值插入到Excel中時,range.Value將返回舊值。

因此,有兩個問題:

  1. 如何將值插入從MATLAB打開excel文件,因此新值立即可見?

  2. 如何進入Matlab的更新(從Excel)值?

回答

1

actxserver將創建一個Excel,你這時就需要將文件加載到一個新的,看不見的副本,並明確使人們看到(你已經發現了這一點,因爲你自己的答案明確)。

或者,如果您已經在Excel中打開了您的文件,則可以使用actxGetRunningServer連接到已預裝文件時可見的Excel正在運行的副本。

+0

我明白'actxGetRunningServer('Excel.Application')'返回'excelapp'對象。但是如何在不指定文件名的情況下獲得'wdata'? – Serg 2012-08-08 17:04:25

+0

好的,我可以通過'excelapp.ActiveSheet'直接獲取'sheet'。這是我需要的。謝謝! – Serg 2012-08-08 17:23:21

+0

這是正確的 - 一旦您連接到正在運行的Excel副本,您可以通過正常引用它們來訪問已打開的所有內容。很高興幫助。 – 2012-08-09 09:44:30

0

這解決了這兩個問題:

excelapp.Visible = 1; 
0

沒有ActiveSheet.get功能,請嘗試使用

range = sheet.Range("A1:B2") 

然後閱讀,你應該能夠調用

range.Value 

range.Text