主要内容

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

这个例子展示了如何使用COM自动化服务器从MATLAB访问另一个应用程序®.对象中的数据创建一个用户界面微软®Excel®文件。如果在应用程序中不使用组件对象模型(COM),请参阅电子表格以替代将Excel电子表格数据导入MATLAB。

为了实现MATLAB和电子表格程序之间的通信,本示例在运行Excel应用程序的自动化服务器中创建一个对象。MATLAB然后通过Excel Automation服务器提供的接口访问电子表格中的数据。最后,该示例创建一个用户界面来访问对象中的数据Microsoft Excel文件。

技术演示

  • 使用自动化服务器从MATLAB访问另一个应用程序

  • 将Excel数据操作为界面和绘图中使用的类型的方法

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

  • 一个接口的实现,允许绘制Excel电子表格的选定列。

  • 将MATLAB图形插入Excel文件。

要查看完整的代码清单,请打开该文件actx_excel.m在编辑器中。

创建Excel自动化服务器

从MATLAB访问电子表格数据的第一步是在自动化服务器进程中使用actxserver函数和程序ID,excel.application

Exl = actxserver('excel.application');

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

exlWkbk = exl.Workbooks;exlFile = exlWkbk。打开([docroot ' / techdoc / matlab_external /例子/ input_resp_data.xls '));

使用工作簿接口访问数据范围对象,该对象存储对指定工作表中数据范围的引用。这个示例访问列中第一个单元格中的所有数据一个到列中的最后一个单元格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文件的sheet1是否通过范围对象接口访问rngObj.该对象返回MATLAB单元格数组中的数据exlData,其中包含数字和字符数据:

exlData = rngObj.Value;

操作数据MATLAB工作空间

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

下面的代码操作数据:

for ii = 1:size(exlData,2) matData(:,ii) =重塑([exlData{2:end,ii}],size(exlData(2:end,ii)));lBoxList{ii} = [exlData{1,ii}];结束

该代码执行以下操作:

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

  • 连接索引操作返回的单个双精度对象。请参阅方括号内的表达式[]

  • 方法将结果重新塑造为一个数组,该数组将数据按列排列重塑函数。

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

Excel电子表格格式

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

input_resp_data.xls电子表格中的数据。

Excel文件格式为:

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

  • 第一列时间用于x其余数据的所有图的-轴。

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

创建绘图仪界面

本例使用一个接口,使您能够从输入和响应数据列表中进行选择。所有数据都是作为时间的函数绘制的,您可以继续向图形中添加更多数据。添加到图中的每个数据图都会导致图例扩展。

该界面包括以下细节:

  • 图例,在向图中添加数据时更新

  • “清除”按钮,用于清除轴上的所有图形

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

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

  • 图删除功能终止自动化服务器

选择和绘制数据

当你点击创建图按钮,它的回调函数查询列表框以确定选择了哪些项并绘制每个数据与时间的关系。MATLAB更新图例以显示新数据,同时仍然维护现有数据的图例。

iSelected = get(listBox,'Value');hold all for p = 1:length(iSelected) switch iSelected(p) case 1 plot(a,tme,matData(:,2) case 2 plot(a,tme,matData(:,3) case 3 plot(a,tme,matData(:,4)) case 4 plot(a,tme,matData(:,5) case 5 plot(a,tme,matData(:,5) case 5 plot(a,tme,matData(:,6) case 6 plot(a,tme,matData(:,7))否则disp('选择数据到plot') end end [b,c,g,lbs] = legend([lbs lBoxList(iSelected+1)]);结束% plotButtonCallback

清除坐标轴

绘图器被设计成在用户从列表框中选择数据时不断添加图形。的清晰的图按钮清除并重置坐标轴,并清除用于存储绘图数据标签的变量(图例使用)。

clearButtonCallback(src,evt) cla(a,'reset') lbs = ";结束% clearButtonCallback

显示或隐藏Excel文件

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

显示或隐藏Excel文件函数disbuttoncallback (src,evt) exl。visible = get(src,'Value');结束% disbuttoncallback

关闭图和终止Excel自动化过程

由于Excel Automation服务器运行在独立于MATLAB的进程中,因此必须显式地终止此进程。没有理由在关闭接口后继续运行此进程,因此本例使用图中的删除函数来终止Excel进程辞职方法。您还需要终止用于保存图形的Excel进程。有关终止此进程的信息,请参见插入MATLAB图形到Excel电子表格

终止Excel处理函数deleteFig(src,evt) exlWkbk. exe。exlWkbk2关闭。思想密切李世默。exl2辞职。辞职结束% deleteFig

插入MATLAB图进Excel电子表格

您可以将使用此界面创建的图形保存在Excel文件中。这个例子使用了一个单独的Excel自动化服务器进程来实现这个目的。的回调。保存图像push按钮创建图像并将其添加到Excel文件:

  • 坐标轴和图例都被复制到一个不可见的图形,配置为在屏幕上打印您所看到的图形(图PaperPositionMode属性设置为汽车).

  • 打印命令将创建PNG图像。

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

服务器和接口在初始化阶段被实例化:

Exl2 = actxserver('excel.application');exlWkbk2 = exl2.Workbooks;wb = invoke(exlWkbk2,'Add');graphSheet =调用(wb.Sheets,'Add');形状= graphSheet.Shapes;

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

function saveButtonCallback(src,evt) tempfig = figure('Visible','off','PaperPositionMode','auto');Tempfigfile = [tempname '.png'];Ah = findobj(f,'type','axes');copyobj(ah,tempfig) %复制图形轴和图例轴print(tempfig,'- dng ',tempfigfile);Shapes.AddPicture (tempfigfile, 0, 1, 18300235);exl2。Visible = 1;结束

运行示例

要运行示例,请在列表框中选择任意项,然后单击创建图按钮。本示例提供的样例数据包含三个输入和三个相关的响应数据集。所有这些数据集都与Excel文件中的第一列(即时间数据)进行了对比。

单击。查看Excel数据文件显示Excel数据文件按钮。若要在另一个Excel文件中保存图形图像,请单击保存图像按钮。如果在当前文件夹中具有写访问权限,则保存图像选项在该文件夹中创建一个临时PNG文件。

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

Excel绘图示例输出。

要运行此示例,请单击此链接

另请参阅

相关的话题