Matlab 和 Excel 之间的 actxserver 通信



我有一个现有的(打开和空的)文件"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)值?

actxserver将创建一个新的、不可见的 Excel 副本,然后您需要将文件加载到该副本中,并显式使其可见(您已经发现了这一点,因为您自己的答案很清楚)。

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

这解决了这两个问题:

excelapp.Visible = 1;

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

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

然后为了阅读,你应该能够打电话

range.Value 

range.Text

最新更新