matlab将excel读进工作区,使用 Excel 作为自动化服务器读取电子表格数据

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

此示例说明如何使用 COM 自动化服务器从 MATLAB® 访问另一个应用程序。该示例创建了用于访问 Microsoft® Excel® 文件中的数据的用户界面。如果您在应用程序中未使用组件对象模型 (COM),请参阅电子表格中的函数和示例,以获取将 Excel 电子表格数据导入 MATLAB 的备选方法。

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

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

将 Excel 数据转换为界面和绘图中所用类型的方法。

以下方法说明如何可视化和操作电子表格数据:

实现一个支持绘制 Excel 电子表格选定列的界面。

将 MATLAB 图窗插入 Excel 文件中。

要查看完整的代码列表,请在编辑器中打开文件 actx_excel.m。创建 Excel 自动化服务器

通过 MATLAB 访问电子表格数据的第一步是使用 actxserver 函数和程序 ID excel.application 在自动化服务器进程中运行 Excel 应用程序。

exl = actxserver('excel.application');

exl 对象提供了对 Excel 程序所支持的多个接口的访问权限。使用 Workbooks 接口打开包含数据的 Excel 文件。

exlWkbk = exl.Workbooks;

exlFile = exlWkbk.Open([docroot '/techdoc/matlab_external/examples/input_resp_data.xls']);

使用 workbook 的 Sheets 接口访问来自 Range 对象的数据,该对象存储了对指定工作表内某个数据范围的引用。此示例访问从列 A 中的第一个单元格到列 G 中的最后一个单元格的所有数据。

exlSheet1 = exlFile.Sheets.Item('Sheet1');

robj = exlSheet1.Columns.End(4); % Find the end of the column

numrows = robj.row; % And determine what row it is

dat_range = ['A1:G' num2str(numrows)]; % Read to the last row

rngObj = exlSheet1.Range(dat_range);

此时,将通过 range 对象接口 rngObj 访问来自 Excel 文件的 sheet1 的整个数据集。此对象将在 MATLAB 元胞数组 exlData 中返回数据,该元胞数组同时包含数值和字符数据:

exlData = rngObj.Value;操作 MATLAB 工作区中的数据

现在数据在元胞数组中,您可以使用 MATLAB 函数提取部分数据并将其重构,以在界面中使用和传递给绘图函数。有关数据的假设,请参阅 Excel 电子表格格式。

以下代码用于操作数据:

for ii = 1:size(exlData,2)

matData(:,ii) = reshape([exlData{2:end,ii}],size(exlData(2:end,ii)));

lBoxList{ii} = [exlData{1,ii}];

end

该代码执行以下操作:

从元胞数组中提取数值数据。请查看花括号 {} 内的索引表达式。

串联索引操作返回的各个双精度值。请查看方括号 [] 内的表达式。

使用 reshape 函数将结果重构为数组,该数组将数据排列在各个列中。

提取每一列 exlData 数据的第一个单元格中的文本,并将文本存储在元胞数组 lBoxList 中。此变量用于生成列表框中的项目。Excel 电子表格格式

此示例假设 Excel 电子表格具有如下图所示的特定组织方式。

8706005f88d8afc187c2f2d6926b4d63.png

该 Excel 文件的格式如下:

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

第一列 Time 用于其余所有数据绘图的 x 轴。

每个列中的所有行都将读入 MATLAB。创建绘图函数界面

此示例使用一个界面,使您能够从输入和响应数据的列表中进行选择。所有数据都绘制为时间的函数,并且您可以继续向图中添加更多数据。添加到图形中的每个数据绘图都会使得图例也随之扩展。

该界面包括下列细节:

在您向图中添加数据时会更新的图例

用于从坐标区中清除所有图的清除按钮

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

用于显示或隐藏当前所访问的 Excel 文件的切换按钮

用于终止自动化服务器的图窗删除功能选择并绘制数据

当您点击 Create Plot 按钮时,其回调函数将查询列表框,以确定选中了哪些项目并绘制每个数据对时间的图。MATLAB 会更新图例以显示新数据,同时仍保留现有数据的图例。

function plotButtonCallback(src,evnt)

iSelected = get(listBox,'Value');

grid(a,'on');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(:,6))

case 6

plot(a,tme,matData(:,7))

otherwise

disp('Select data to plot')

end

end

[b,c,g,lbs] = legend([lbs lBoxList(iSelected+1)]);

end % plotButtonCallback清除坐标区

此绘图函数设计为当用户从列表框中选择数据时可持续添加图形。Clear Graph 按钮将清除并重置坐标区,并清除用于存储绘图数据标签(供图例使用)的变量。

%% Callback for clear button

function clearButtonCallback(src,evt)

cla(a,'reset')

lbs = '';

end % clearButtonCallback显示或隐藏 Excel 文件

MATLAB 程序可访问在自动化服务器中运行的 Excel 应用程序的属性。通过将 Visible 属性设为 1 或 0,此回调可控制 Excel 文件的可见性。

%% Display or hide Excel file

function dispButtonCallback(src,evt)

exl.visible = get(src,'Value');

end % dispButtonCallback关闭图窗并终止 Excel 自动化进程

由于 Excel 自动化服务器在 MATLAB 以外的单独进程中运行,因此您必须显式终止此进程。关闭界面后,没有必要再让此进程保持运行状态,因此该示例通过 Quit 方法,使用图窗的 delete 函数来终止 Excel 进程。您还需要终止用于保存图的 Excel 进程。有关终止此进程的信息,请参阅将 MATLAB 图插入 Excel 电子表格。

%% Terminate Excel processes

function deleteFig(src,evt)

exlWkbk.Close

exlWkbk2.Close

exl.Quit

exl2.Quit

end % deleteFig将 MATLAB 图插入 Excel 电子表格

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

如屏幕中所见,坐标区和图例都被复制到一个配置为打印图形的不可见图窗(图窗的 PaperPositionMode 属性被设为 auto)。

print 命令可创建 PNG 图像。

使用 Shapes 接口将图像插入 Excel 工作簿。

服务器和接口均在初始化阶段进行实例化:

exl2 = actxserver('excel.application');

exlWkbk2 = exl2.Workbooks;

wb = invoke(exlWkbk2,'Add');

graphSheet = invoke(wb.Sheets,'Add');

Shapes = graphSheet.Shapes;

使用以下代码实现 Save Graph 按钮回调:

function saveButtonCallback(src,evt)

tempfig = figure('Visible','off','PaperPositionMode','auto');

tempfigfile = [tempname '.png'];

ah = findobj(f,'type','axes');

copyobj(ah,tempfig) % Copy both graph axes and legend axes

print(tempfig,'-dpng',tempfigfile);

Shapes.AddPicture(tempfigfile,0,1,50,18,300,235);

exl2.visible = 1;

end运行示例

要运行该示例,请选择列表框中的任意项目,然后点击 Create Plot 按钮。此示例提供的示例数据包含三个输入和三个关联的响应数据集。在该示例中,绘制所有这些数据集对 Excel 文件中的第一列(即时间数据)的图。

通过点击 Show Excel Data File 按钮查看 Excel 数据文件。要将图形图像保存在另一个 Excel 文件中,请点击 Save Graph 按钮。如果您在当前文件夹中拥有写访问权限,则 Save Graph 选项将在该文件夹中创建一个临时 PNG 文件。

界面如下图所示,列表框中的输入/响应对组为选中状态,坐标区则显示相应绘图。

b64484fcd559843a9c968077ef87ca89.png

要运行该示例,请点击此链接。

另请参阅

相关主题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值