使用ActiveX从Matlab打开现有工作簿

时间:2012-04-09 19:55:09

标签: matlab vba excel-vba activex excel

我需要使用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工作簿来完成此操作。我这样做的努力前几天在我的电脑中造成了“严重错误”。所以我真的可以使用一些指导。

由于

2 个答案:

答案 0 :(得分:1)

XLSREAD实际上是通过ActiveX访问文件,就像你想要的那样。我没有看到任何理由写你自己(并希望清除错误)程序。

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

如果您键入edit xlsread,您实际上可以看到XLSREAD正在做什么。带有该功能的m文件将在MATLAB编辑器中打开。您可以通过优秀的MATLAB调试工具逐一学习代码并实际运行它。

答案 1 :(得分:0)

我不确定您是想修改现有的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。可能会在这里和那里为您节省几行代码。