我有一个现有的(打开和空的)文件"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
返回旧值。
所以,有两个问题:
如何将值插入到 Matlab 打开的 excel 文件中,以便新值立即可见?
如何进入Matlab更新的(来自Excel)值?
actxserver
将创建一个新的、不可见的 Excel 副本,然后您需要将文件加载到该副本中,并显式使其可见(您已经发现了这一点,因为您自己的答案很清楚)。
或者,如果您已经在 Excel 中打开了文件,则可以使用 actxGetRunningServer
连接到预加载文件时已可见的正在运行的 Excel 副本。
这解决了这两个问题:
excelapp.Visible = 1;
没有 ActiveSheet.get 函数,请尝试使用
range = sheet.Range("A1:B2")
然后为了阅读,你应该能够打电话
range.Value
或
range.Text