【问题标题】:actxserver communication between Matlab and ExcelMatlab 和 Excel 之间的 actxserver 通信
【发布时间】:2012-08-08 14:49:55
【问题描述】:

我有一个现有的(打开的和空的)文件“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. 如何将更新后的(来自 Excel)值输入 Matlab?

【问题讨论】:

    标签: excel matlab activex


    【解决方案1】:

    actxserver 将创建一个新的、不可见的 Excel 副本,然后您需要将文件加载到该副本中并明确显示(您已经发现了这一点,正如您自己的答案所表明的那样)。

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

    【讨论】:

    • 我知道actxGetRunningServer('Excel.Application') 返回excelapp 对象。但是如何在不指定文件名的情况下获取wdata
    • 好的,我可以直接通过excelapp.ActiveSheet 获取sheet。这就是我需要的。谢谢!
    • 没错——一旦你连接到 Excel 的运行副本,你就可以访问所有已经在其中打开的东西,只需像往常一样引用它们。很高兴它有帮助。
    【解决方案2】:

    这解决了这两个问题:

    excelapp.Visible = 1;
    

    【讨论】:

      【解决方案3】:

      没有ActiveSheet.get函数,试试用

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

      那么为了阅读,你应该可以调用

      range.Value 
      

      range.Text
      

      【讨论】:

        猜你喜欢
        • 2014-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-25
        • 2013-08-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多