主要内容

使用读取电子表格数据excel.作为自动化服务器

此示例显示如何使用COM Automation Server访问Matlab的其他应用程序®。它创建用户界面以访问数据中的数据微软®excel.®文件。如果您不使用应用程序中的组件对象模型(COM),请查看函数和示例电子表格有关将Excel电子表格数据导入MATLAB的替代方案。

要启用MATLAB和电子表格程序之间的通信,此示例在运行Excel应用程序的自动化服务器中创建一个对象。然后,MATLAB通过Excel Automation Server提供的接口访问电子表格中的数据。最后,该示例创建用户界面以访问数据中的数据微软Excel.文件。

技术证明

  • 使用自动化服务器从MATLAB访问其他应用程序

  • 如何将Excel数据操作成界面和绘图的类型

以下技术演示了如何可视化和操作电子表格数据:

  • 实现一个接口,它启用了绘制Excel电子表格的所选列的绘图。

  • 将MATLAB图插入Excel文件中。

要查看完整的代码列表,请打开文件ACTX_EXCEL.M.在编辑中。

创建excel.自动化服务器

从MATLAB访问电子表格数据的第一步是使用使用的自动化服务器进程中的Excel应用程序ActxServer功能和程序ID,Excel.Application.

EXL = ACTXSERVER('Excel.Application');

exl.对象提供对Excel程序支持的多个接口的访问。金宝app使用工作簿打开包含数据的Excel文件的界面。

exlwkbk = exl.workbooks;exlfile = exlwkbk.open([docroot'/techdoc/matlab_external/examples/input_resp_data.xls');

使用工作簿床单从a访问数据的界面范围对象,存储参考来自指定纸张的一系列数据。此示例从列中的第一个单元中访问所有数据一种到列中的最后一个单元格G

exlsheet1 = exlfile.sheets.item('sheet1');robj = exlsheet1.columns.end(4);%找到列numrows = robj.row的末尾;%并确定它是dat_range = ['a1:g'num2str(numrows)];%读取到最后一个行rngobj = exlsheet1.range(dat_range);

此时,来自Excel文件的整个数据集表1通过Range对象接口访问rngobj.。此对象返回MATLAB单元格数组中的数据EXLDATA.,其中包含数字和字符数据:

EXLDATA = RNGOBJ.VALUE;

操纵数据马铃薯工作区

既然数据位于单元数组中,您可以使用MATLAB函数来提取和重塑数据的部分以在接口中使用并传递给绘图功能。有关数据的假设,请参阅Excel电子表格格式

以下代码操纵数据:

对于II = 1:尺寸(EXLDATA,2)MATDATA(:,ii)= REPAPE([EXLDATA {2:末端,II}],大小(EXLDATA(2:结束,II)));lboxlist {ii} = [exldata {1,ii}];结尾

代码执行以下操作:

  • 从单元格数组中提取数字数据。请参阅卷曲括号内的索引表达式{}

  • 连接索引操作返回的各个双打。看到方括号内的表达式[]

  • 将结果重新插入一个数组,以使用该数组排列列中的数据重塑功能。

  • 从每列列中提取第一个单元格中的文本EXLDATA.数据并将文本存储在单元格数组中lboxlist.。此变量用于在列表框中生成项目。

excel.电子表格格式

此示例假定Excel电子表格的特定组织,如下图所示。

Excel文件的格式如下:

  • 每列中的第一个元素是标识列中包含的数据的文本。这些值被提取并用于填充列表框。

  • 第一栏时间用于它X-AXIS剩余数据的所有图。

  • 每列中的所有行都读入MATLAB。

创建绘图仪接口

此示例使用界面,使您可以从输入和响应数据列表中进行选择。所有数据都被绘制为时间函数,您可以继续向图中添加更多数据。添加到图表中的每个数据绘图都会导致图例展开。

该界面包括以下详细信息:

  • 传奇将数据添加到图表时更新

  • 清除按钮,使您可以清除轴上的所有图形

  • 保存按钮将图形作为PNG文件保存并将其添加到另一个Excel文件中

  • 切换按钮显示或隐藏正在访问的Excel文件

  • 图删除函数终止自动化服务器

选择和绘制数据

当你点击创造情节按钮,其回调函数查询列表框以确定选择了哪些项目并绘制每个数据与时间。MATLAB更新图例以显示新数据,同时仍然保持现有数据的图例。

函数plotbuttoncallback(src,evnt)iselected = get(listbox,'值');网格(A,'ON');保持所有p = 1:长度(iselected)开关iselected(p)案例1绘图(a,tme,matdata(:,2))案例2绘图(a,tme,matdata(a,tme,matdata(:3))案例3绘图(a,tme,matdata(:,4))案例4绘图(a,tme,matdata(:,5))案例5 plot(a,tme,matdata(:,6))案例6图(a,tme,matdata(:,7))否则地('选择数据到绘图')结束[b,c,g,lbs] =图例([lbs lboxlist(iselected + 1)]);终端%plotbuttoncallback.

清除轴

根据用户从列表框中选择数据,绘图仪旨在连续添加图形。这清晰的图形按钮清除并重置轴并清除用于存储绘图数据标签的变量(由图例使用)。

Clear按钮功能ClearButtonCallback(SRC,EVT)CLA(A,'重置')LBS ='';结束%clearbuttoncallback.

显示或隐藏excel.文件

MATLAB程序可以访问在自动化服务器中运行的Excel应用程序的属性。通过设置可见的财产1要么0.,此回调控制Excel文件的可见性。

%%显示或隐藏Excel文件功能DisputtonCallback(SRC,EVT)EXL.visible = GET(SRC,'值');END%DIMACBUTTONCALLBALL.

近距离和终止excel.自动化过程

由于Excel自动化服务器在MATLAB中的单独进程中运行,因此您必须明确终止此过程。关闭界面后没有理由在关闭界面后运行此过程,因此此示例使用该图形删除用终止Excel过程的功能辞职方法。您还需要终止用于保存图形的Excel过程。有关终止此过程的信息,请参阅将matlab图形插入Excel电子表格

%% terminate Excel进程函数deletefig(src,evt)exlwkbk.close exlwkbk2.close exl.quit exl2.quit ex%deletefig

插入马铃薯图形进入excel.电子表格

您可以在Excel文件中保存使用此接口创建的图形。此示例为此目的使用单独的Excel自动化服务器进程。回调保存图形按钮创建图像并将其添加到Excel文件中:

  • 轴和图例都被复制到配置为在屏幕上看到的图形(图PaperApositionMode.属性设置为汽车)。

  • 打印命令创建PNG图像。

  • 使用形状在Excel工作簿中插入图像的界面。

在初始化阶段期间,服务器和接口是实例的:

EXL2 = ACTXSERVER('Excel.Application');EXLWKBK2 = EXL2.WORKBOOKS;WB = Invoke(EXLWKBK2,'ADD');GraphSheet = Invoke(WB.Sheets,'Add');shapes = graphsheet.shapes;

使用此代码实现保存图形按钮回调:

函数savebuttoncallback(src,evt)tempfig = figure = figure('可见','关闭','picensa positionMode','auto');tempfigfile = [tempname'.png'];ah = findobj(f,'类型','轴');CopyObj(AH,Tempfig)%复制图形轴和图例轴打印(Tempfig,' -  dpng',tempfigfile);shapes.addpicture(tempfigfile,0,1,50,18,300,235);exl2.visible = 1;结尾

跑例

要运行示例,请在列表框中选择任何项目,然后单击创造情节按钮。本实施例提供的示例数据包含三个输入和三个相关响应数据集。所有这些数据集都是绘制的与Excel文件中的第一列相反,这是时间数据。

通过单击查看Excel数据文件显示Excel数据文件按钮。要在不同的Excel文件中保存图形的图像,请单击“保存图形按钮。如果您在当前文件夹中有写访问权限,那么保存图形选项在该文件夹中创建临时PNG文件。

以下图像显示了在列表框中选择的输入/响应对的接口,并在轴上绘制。

要运行此示例,请单击此示例关联

也可以看看

相关话题