【问题标题】:Opening an existing workbook from Matlab using ActiveX使用 ActiveX 从 Matlab 打开现有工作簿
【发布时间】:2012-04-09 19:55:09
【问题描述】:

我需要使用 ActiveX 从 Matlab 中打开一个现有的 excel 工作簿。 xlsread 不可行,因为太慢了。从这个论坛获得帮助后(谢谢!)我知道要从 matlab 中创建一个新的 excel 工作簿并用输出填充它,你可以这样做:

    %# Create and NAME the output file name
    wbk=1;fName = fullfile(pwd, 'ALLSDtemp2');
    %# create Excel COM Server
    Excel = actxserver('Excel.Application');
    Excel.Visible = true;
    %# delete existing file
    if exist(fName, 'file'), delete(fName); end
    %# create new XLS file
    wb = Excel.Workbooks.Add();
    wsheet=1;

    (...calculations...)

    % Write output to excel file
    Mat=[calculation_output];
    % Select work book
    wb.Sheets.Item(wsheet).Activate();
    % Get Worksheets object
    ws = wb.Sheets;
    %# insert matrix in sheet
    Excel.Range(cellRange).Select();
    Excel.Selection.Value = num2cell(Mat);

但我不知道如何使用已经存在的 Excel 工作簿来执行此操作。前几天我的努力导致我的电脑出现“严重错误”。所以我真的可以使用一些指导。

谢谢

【问题讨论】:

标签: matlab vba excel activex


【解决方案1】:

XLSREAD 实际上是通过 ActiveX 访问文件,这与您想要的方式相同。我看不出有任何理由编写您自己的(并希望清除错误)程序。

如果 XLSREAD 太慢,可以使用PROFILER 查找函数中的性能瓶颈。

如果您输入edit xlsread,您实际上可以看到 XLSREAD 正在做什么。带有函数的 m 文件将在 MATLAB 编辑器中打开。您可以学习代码并使用出色的 MATLAB 调试工具逐行实际运行它。

【讨论】:

  • 使用上述代码写入 excel 肯定比使用 xlswrite 写入 excel 快很多、很多、很多。我认为从 excel 导入数据也是如此。您会看到,我不想在每个循环上使用 xlsread,而是只想打开工作簿一次并为所有循环保持打开状态,并根据需要在每个循环中从中提取数据。否则它将永远持续下去。
  • 是的,我同意,如果你在循环中编写代码会快得多。无论如何,我相信我的回答仍然有效,因为您可以从xlsread 获取核心代码。
【解决方案2】:

根据您的问题,我不确定您是只想修改现有的 Excel 文件,还是修改当前在 Excel 中打开的 Excel 文件。

如果是第一个,那么你可以这样打开它:

xl = actxserver('Excel.Application');
xl.Visible = true;
wb = xl.Workbooks.Open('path_to_my_excel_file');

然后继续进行任何你想要的修改,就像你已经在做的那样。

如果要访问当前在 Excel 中打开的 Excel 文件,请使用 actxGetRunningServer 而不是 actxserver。您将连接到 Excel 的运行副本,并能够找到任何打开的工作簿。

顺便说一句,您无需选择范围即可更改其值。您可以使用ws.Range(cellRange).Value = myValue。可能会在这里和那里为您节省几行代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2020-05-24
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多