2

我需要使用 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 工作簿来做到这一点。前几天我的努力导致我的电脑出现“严重错误”。所以我真的可以使用一些指导。

谢谢

4

2 回答 2

1

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

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

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

于 2012-04-09T20:30:05.297 回答
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. 可能会在这里和那里为您节省几行代码。

于 2012-04-10T12:31:52.057 回答