使用 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 电子表格具有如下图所示的特定组织方式。

该 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 文件。

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

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

另请参阅

相关主题

matlab 服务器错误 电子表格,使用 Excel 作为自动化服务器读取电子表格数据相关推荐

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

    使用 Excel 作为自动化服务器读取电子表格数据 此示例说明如何使用 COM 自动化服务器从 MATLAB® 访问另一个应用程序.该示例创建了用于访问 Microsoft® Excel® 文件中的数 ...

  2. python处理Excel实现自动化办公教学(数据筛选、公式操作、单元格拆分合并、冻结窗口、图表绘制等)【三】

    相关文章: python处理Excel实现自动化办公教学(含实战)[一] python处理Excel实现自动化办公教学(含实战)[二] python处理Excel实现自动化办公教学(数据筛选.公式操作 ...

  3. qq不能发说说显示服务器错误,qq为什么发送不成word服务器拒绝发送离线请求. - 卡饭网...

    qq服务器拒绝发送离线文件怎么办 qq服务器拒绝发送离线文件怎么办 qq服务器拒绝发送离线文件怎么办 服务器拒绝了您发送离线文件的原因: 第一种:传输文件容量超过限制;实际上所有的普通QQ用户都可用使 ...

  4. mvc怎么请求服务器错误信息,asp.net-mvc – IIS显示服务器错误而不是自定义错误...

    我正在使用MVC 5,我正在使用自定义视图处理我的错误,例如(404,403 --等) 它在我的本地IIS上工作正常,但是当我在登台服务器上发布时,它显示有关这些错误代码的IIS服务器错误消息. 它显 ...

  5. 云应用程序服务器错误怎么办,“/”应用程序中的服务器错误解决方法

    "/"应用程序中的服务器错误解决方法,是与WebConfig配置文件中mode属性相关,修改属性值便可查看具体错误原因. 电脑重装了下系统,重新打开项目运行报错:"/&q ...

  6. phpMyadmin报错 #2054无法登陆mysql服务器错误、#2002无法登陆mysql服务器错误

    由于电脑本地已经装了mysql,最近因为学习原因需要下载使用phpstudy,安装后发现phpMyadmin登录后发生#2054无法登陆mysql服务器报错,查询众多帖子后都是说密码策略出错,导致无法 ...

  7. 天使动漫网显示服务器错误,HEALTHY HAROLD, HEALTHY ME连接服务器失败_九游手机游戏...

    HEALTHY HAROLD, HEALTHY ME连接服务器失败游戏攻略 A fun, interactive game for pre school children and their pare ...

  8. python处理Excel实现自动化办公教学(含实战)【一】

    相关文章: python处理Excel实现自动化办公教学(含实战)[一] python处理Excel实现自动化办公教学(含实战)[二] python处理Excel实现自动化办公教学(数据筛选.公式操作 ...

  9. 错误代码大全【100(临时响应)】【200(成功)】【300(已重定向)】【400(请求错误)】【500(服务器错误)】(HTTP协议版本)

    最常出现的错误代码: 200(成功) 服务器已成功处理了请求.通常,这表示服务器提供了请求的网页. 400(错误请求) 服务器不理解请求的语法. 404(未找到) 服务器找不到请求的网页.例如,如果请 ...

最新文章

  1. 面向用户计算机,一款面向普通用户的防火墙软件,让你了解计算机到底产生了哪些网络流量?...
  2. 【spring基础】spring 官方下载地址
  3. python socket代码_python入门之socket代码练习
  4. 关于parseInt面试题
  5. 《C4.5: Programs for Machine Learning》chaper4实验结果重现
  6. 设计模式-Factory Method Pattern
  7. 网易数据运河系统NDC设计与应用
  8. 省地县级联操作 http://www.popub.net/script/pcas.html
  9. cvMatchTemplate() 模板匹配
  10. 傅里叶变换 相位谱 幅度谱
  11. 手机文件上传ftp服务器,安卓手机文件上传 ftp服务器
  12. 我的 Android 开发实战经验总结
  13. Jetson 系列——Jetson Nano使用sudo命令免输入密码方法
  14. 灭了珊瑚虫,OOXX了SOFF,下一个是谁?
  15. 清华邓俊辉教授 数据结构算法 课程内容
  16. 计算机c盘用户爆满,为啥你的windows电脑C盘经常爆满?
  17. Spark高级分析与机器学习笔记
  18. 西门子dcs系统组态手册下载_不懂PLC,SCADA,也能通俗易懂的了解DCS(分布式控制系统)...
  19. ambari部署hadoop
  20. 【未知攻焉知防】如何利用旁注渗透入侵服务器站点

热门文章

  1. OEA 中的多国语言实现
  2. ai透视按键_透视人工智能
  3. WIN7下查看DirectX版本方法
  4. 同一个C#程序引用了2个不同版本的同一个第三方DLL
  5. 弱口令到底是什么牛马?
  6. html js 图片放大效果,JavaScript实现图片放大预览效果
  7. A 股指数分时行情数据 API 数据接口
  8. python入门day11闭包装饰器
  9. 摘自林少波的《毕业5年决定你的一生》
  10. fopennbsp;,nbsp;freadnbsp;fwr…