matlab与Excel之间的actxserver通信

时间:2012-08-08 14:49:56

标签: excel matlab activex

我有一个现有的(打开的和空的)文件“D:\ api.xlsx”,需要从Matlab与它通信。 首先,我尝试从A1:B2读取值,并插入新值:

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)值?

3 个答案:

答案 0 :(得分:1)

actxserver将创建一个新的,不可见的Excel副本,然后您需要将该文件加载到其中并明确显示(您已经发现了这一点,因为您自己的答案已经明确了)。 / p>

或者,如果您已经在Excel中打开了文件,则可以使用actxGetRunningServer连接到预先加载文件时已经显示的正在运行的Excel副本。

答案 1 :(得分:0)

这解决了这两个问题:

excelapp.Visible = 1;

答案 2 :(得分:0)

没有ActiveSheet.get函数,请尝试使用

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

然后阅读,你应该可以打电话

range.Value 

range.Text