我需要使用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工作簿来完成此操作。我这样做的努力前几天在我的电脑中造成了“严重错误”。所以我真的可以使用一些指导。
由于
答案 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
。可能会在这里和那里为您节省几行代码。