Excel

Link是一个在Windows环境下实现Excel与Matlab进行链接的插件。通过连接Excel和Matlab,用户可以在Excel工作表空间和宏编程工具中使用Matlab的数值计算,图形处理等功能,不需要脱离Excel环境。同时由Excel

Link来保证两个工作环境中的数据交换和同步更新。 1. Excel

Link的安装和和设置首先,在系统中安装Excel软件。然后安装Matlab和Excel

Link,用Matlab安装盘开始安装,选择自定义安装中,在选中组件ExcelLink,如下图所示: 安装完Excel

Link后还需要在Excel中进行一些设置后才能使用。启动Excel,选择菜单“工具”项下的“加载宏”项,弹出如下对话框:

选中Excel

Link项。如果该项不存在,则通过浏览目录,在目录%MATLAB%toolboxexlink下找到excllink.xla文件,如下图示,并确定。

选中ExcelLink项并确定后,在Excel中多了一个Excel Link工具条,如下图示:

经过以上的设置后就可以开始使用Excel Link了。

2. ExcelLink连接管理函数

(1) Matlabinit

该函数只能在宏子例程中使用。初始化ExcelLink和启动Matlab进程。只有在MLAutoStart函数中使用“no”参数,才需要手动使用Matlabinit来初始化ExcelLink和启动Matlab进程,

如果使用参数“yes”,则Matlabinit是自动执行的。

使用语法:Matlabinit

(2) MLAutoStart

设置自动启动Matlab和ExcelLink。

在工作表中的使用语法:

MLAutoStart("yes")

MLAutoStart("no")

在宏中的使用语法:

MLAutoStart "yes"

MLAutoStart "no"

使用“yes”参数,则当Excel启动时,自动启动Matlab和ExcelLink;如果使用参数“no”,则当Excel启动时,不启动Matlab和ExcelLink。如果在此之前它们已经启动,则无任何影响。

(3) MLClose

终止Matlab进程并删除Matlab工作空间的所有变量。并通知Excel,Matlab不再运行。

在工作表中的使用语法:

MLClose()

在宏中的使用语法:

MLClose

(4) MLOpen

启动Matlab进程。如果Matlab进程已经启动,则MLOpen函数不进行任何操作。在使用MLClose关闭Matlab进程后使用MLOpen来重新启动Matlab。

在工作表中的使用语法:

MLOpen()

在宏中的使用语法:

MLOpen

3. ExcelLink数据管理函数

(1) Matlabfcn

根据给定的Excel数据执行Matlab命令。

在工作表中使用时的语法:

matlabfcn(command, inputs)

参数command,Matlab将执行的命令,命令需要写成“command”(使用双引号引起来)的形式。

参数 inputs 传给Matlab命令的变长输入参数列表。列表是包含数据的工作表单元格范围。

函数返回单一数值或者是字符串,结果返回到调用函数的单元格中。

例如matlabfcn(”sum”,B1:B10);把从B1到B10的单元格中数据相加,如下图示:

并将结果返回到当前的活动单元格。即A11,结果如下图。

(2) Matlabsub

根据给定的Excel数据执行Matlab命令,并将结果返回到指定的单元格中。

在工作表中的使用语法:

matlabsub(command,edat,inputs)

command和inputs参数的与matlabfcn相同。

参数edat,指定返回值写入在工作表中的位置。如果edat用双引号引起来,则edat必须是单元格地址或范围的名字。如果参数不用引号引起edat的形式,则通过计算获得矩阵名。

例如:matlabsub(”sum”,”A1”,B1:B10);把工作表中从单元格B1到B10的数据相加,并将结果返回到单元格A1中。

注意:edat指定的位置不能包含matlabsub所在的位置。

(3) MLAppendMatrix

将Excel工作表中的数据追加到Matlab中指定的矩阵中如果该矩阵不存在,则创建矩阵。

在工作表中使用的语法:

MLAppendMatrix(var_name,mdat)

在宏中使用的语法:

MLAppendMatrix var_name,mdat

注意要追加的数据维数要和原矩阵中的维数相匹配,否则出错。

例如:MLAppendMatrix(”a”,A1:A2);假设矩阵a是个2行3列的矩阵,如下图:

将A1:A2中的数据追加到矩阵后,如下图示

成为矩阵的第四列,如下图示。

单元格B1中是字符a,函数MLAppendMatrix(B1,A1:A2)的作用于MLAppendMatrix(”a”,A1:A2)相同。

(4) MLDeleteMatrix

删除Matlab空间中指定的矩阵

在工作表中使用的语法:

MLDeleteMatrix(var_name);

在宏中使用的语法:

MLDeleteMatrix var_name

Var_name,是要删除的矩阵名,如果矩阵名在引号内“var_name”的形式,则直接指定变量名,如果var_name不用引号引起来,则通过计算获得实际矩阵的名字。

例如,单元格B1中的内容为a,MLDeleteMatrix(B1),则表示删除Matlab工作空间的矩阵a,它等价于MLDeleteMatrix(”a”)

(5) MLEvalString

将命令(写成字符串的形式)传到Matlab中执行。

在工作表中使用的语法:

MLEvalString(command);

在宏中使用的语法:

MLEvalString command

参数command如果是用引号引起来”command”的形式,则是直接指定命令;如果不用引号引起来command的形式,则command必须是包含了命令字符串的工作表的单元格地址或者是范围。

例如:MLEvalString(”b=magic(4)”);

表示在Matlab中执行命令b=magic(4);

(6) MLGetMatrix

将指定的Matlab矩阵写入到Excel工作表中的指定位置。

在工作表中使用的语法:

MLGetMatrix(var_name,edat)

在宏中使用的语法:

MLGetMatrix var_name,edat

参数Var_name,是要写入工作表的矩阵名,如果矩阵名在引号内“var_name”的形式,则直接指定变量名,如果var_name不用引号引起来,则通过计算获得实际矩阵的名字。

参数edat指定了矩阵写入工组表的位置。如果参数是用引号引起”edat”的形式,则是直接指定矩阵名,如果参数不用引号引起edat的形式,则通过计算获得矩阵名。

例如:MLGetMatrix(”a”,”sheet1!B1”);

将矩阵a写入工作表sheet1以单元格B1起始的位置,如果a是一个2行3列的矩阵,则矩阵占据sheet1的B1到D2的空间。如果在A1中有字符串

a,则MLGetMatrix(A1,”

sheet1!C1”)的作用与MLGetMatrix(”a”,”sheet1!C1”)相同。函数运行结果如图示。

(7) MLGetVar

将MatLab矩阵传送给Excel VBA变量,只能在宏子例程中使用。

使用语法:

MLGetVar ML_var_name,VBA_var_name

参数ML_var_name是将获取的矩阵名。如果矩阵名在引号内“ML_var_name”的形式,则直接指定变量名,如果ML_var_name不用引号引起来,则通过计算获得实际矩阵的名字。

参数VBA_var_name,将其Matlab矩阵数据传给的VBA变量名,不用引号将其引起来。

例如:

Sub Fetch()

MLGetVar "J", DataJ

End Sub

表示将Matlab矩阵J的数据写入到VBA变量DataJ中。

(8) MLPutMatrix

用指定位置的Excel工作表中的数据,创建或者覆盖Matlab矩阵。

在工作表中使用的语法:

MLPutMatrix(var_name,mdat)

在宏中使用的语法:

MLPutString var_name,mdat

参数var_name是将有被创建或者被覆盖的矩阵名。如果指定的矩阵不存在,则创建该矩阵,如果矩阵已经存在,则覆盖该矩阵。

参数mdat,指定工作表中的位置。

例如:工作表中有A1到C2的数据,使用函数MLPutMatrix(”c”,A1:C2),则可以将这些数据写到Matlab矩阵c中,如下图示。

注意:如果修改工作表中的数据,则Matlab中的矩阵相应发生变化。如果把数据剪切到别的地方,如D1到F2,则函数MLPutMatrix(”c”,A1:C2)会自动更改为MLPutMatrix(”c”,D1:F2)

(9) MLPutVar

使用VBA变量的数据创建或者覆盖Matlab 矩阵。只能在宏子例程中使用。

使用语法:

MLPutVar ML_var_name,VBA_var_name

参数ML_var_name是将被创建或覆盖的矩阵名。如果矩阵名在引号内“ML_var_name”的形式,则直接指定变量名,如果ML_var_name不用引号引起来,则通过计算获得实际矩阵的名字。

参数VBA_var_name,将其数据传给Matlab矩阵的VBA变量名,不用引号将其引起来。

如果VBA_var_name变量包含字符串的数据,则输出到Matlab为元胞数组格式。

例如:

Sub Put()

MLPutVar "K", DataK

End Sub

用VBA变量DataK中的数据创建或着覆盖Matlab矩阵K。

4. 补充使用Excel Link的注意事项

(1) Excel工作表通常以“=”作为起始标记,例如=matlabfcn(”sum”,B1:B10);

(2) 大多数的Excel Link函数中有两种定义变量的方式:直接定义,即将变量用双引号标记则是直接定义变量,例如

MLGetMatrix(”bonds”,”sheet1!C1”),其中bonds是直接定义的变量;间接定义,函数中的不用双引号的工作表单元地址或行列名称被看作是间接变量,函数对其指引的内容进行操作。工作表单元地址可以包含页表序号,例如MLDeleteMatrix(B1);单元格B1中的内容为a,则相当于执行MLDeleteMatrix(”a”);

(3) 建议使用Excel

Link的自动计算模式。如果在手动计算模式下使用MLGetMatrix函数,当在单元格中输入完函数等式时,需要按F9键执行,而按下F9键将有可能引起其他工作表函数的重复执行,产生不可预料的后果。设置Excel

Link自动计算模式方法如下:在Excel“工具”菜单的“选项”,选择重新计算标签,图4.2.13。

(4) 如果需要在工作表中重新计算Excel Link函数,最好按F2键和回车键单步执行每个函数。

(5)

如果在MLGetMatrix函数中使用了单元的直接地址,那么当删除了行或列或者将函数从其他单元复制到新的单元后,一定要重新修改地址。Excel

Link不能自动改变MLGetMatrix中的地址。

(6)在打开一个包含ExcelLink函数的Excel数据表的时候,Excel会自动从上到下,从左到右地执行这些函数,所有有可能出现如

“#COMMAND!”或“#NONEXIST”等Excel错误提示,只需关闭所有Matlab图形窗口,然后按F2键并回车重新单步执行单元格里地函数就可以了。

5. 在工作表和在宏中使用ExcelLink的例子

例1 :(在工作表中使用ExcelLink)如下图所示:

使用mlopen()函数启动Matlab,

使用mlevalstring("load

census")载入matlab自带的数据文件census,其中包含矩阵cdate和pop。

使用mlgetmatrix("cdate","E1"),将Matlab空间的矩阵cdata写入到工作表中以E1开始的位置;

mlgetmatrix("pop","F1");将Matlab空间的矩阵pop写入到工作表中以F1开始的位置;

运行结果如下图所示:

mlputmatrix("x",E1:E21)

mlputmatrix("y",F1:F21)

将E1到E21中的数据以及F1到F21中的数据分别写入到Matlab空间的矩阵变量x和y中。

mlevalstring("z=x-mean(x)./std(x)")

mlevalstring("[p2,s2]=polyfit(z,y,2)")

mlevalstring("[pop2,de12]=polyval(p2,z,s2)")

根据所给的数据拟合多项式并进行偏差计算。

mlevalstring("plot(x,y,'+',x,pop2,'g-',…

x,pop2+2*del2,'r:',x,pop2-2*del2,'r:')")

绘出离散点、拟合曲线图及偏差曲线图,结果如下图示:

mlclose();

关闭Matlab。

例2:在宏中使用Excel Link

新建一个Excel工作表,打开Visual Basic编辑器,操作如下图示:

然后在工程管理器中插入模块,如下图:

在模块代码区域写下如下代码,如下图:

Function excellinktest()

MLOpen

mlevalstring "load census"

mlgetmatrix "cdate", "E1"

mlgetmatrix "pop", "F1"

mlputmatrix "x", Range("E1:E21")

mlputmatrix "y", Range("F1:F21")

Matlabrequest

mlevalstring "z=(x-mean(x))./std(x)"

mlevalstring "[p2,s2]=polyfit(z,y,2)"

mlevalstring "[pop2,del2]=polyval(p2,z,s2)"

mlevalstring

"plot(x,y,'+',x,pop2,'g-',x,pop2+2*del2,'r:',x,pop2-2*del2,'r:')"

End Function

选中模块1,在“工具”菜单,“引用”选项,如下图示。

弹出引用对话框,选择Excel Link,如下图:

确定后,即可运行该程序,结果与例1相同。

1、MATLAB的数据导出问题:

如果计算结果被保存为B矩阵:

第一步在指令栏输入:

》save 'b.txt' B -ascii %(把矩阵B的数据,导出到了TXT文件中,名字为b.txt)%

回车

结果b.txt文件就会被保存到work文件夹下

打开b.txt,你会发现,如果数据很多,排列可能没有想象的整齐,而且是二进制显示的,你会怀疑出问题了,别担心,没问题。

matlab怎么导出矩阵,如何将matlab中矩阵导出到txt文件中相关推荐

  1. java 将map写入文件_如何将java中map数据写入txt文件中

    用户提问 例如 static{ //初始化默认用户 user.setUsername("admin"); user.setPassword("123"); tr ...

  2. 从Excel文件中找出在TXT文件中没有出现的 行之_代码片段

    #从data.txt(Excel文件)中找出一些不在target.txt(TXT文件)文件行中出现的行. #定义一个函数,判断ls中的每个单词是否出现在了mystring中了.如果全部都在,返回真de ...

  3. MATLAB将图像数据以txt文件保存以及从txt文件中读矩阵并显示图像

    网上这方面的分享挺多的,但是发现不怎么好用,下面介绍鄙人的方法 1.将一副灰度图像矩阵读入txt文件.如果你的图像是rgb的话用rgb2gray转成灰度的. 2.从txt文件中读数据到MATLAB并将 ...

  4. 用MATLAB将矩阵数据写入txt文件中,打开乱码原因

    MATLAB将数据写入txt文件中乱码的原因,是将数据按照二进制文件写入txt文件,所以打开会出现乱码的情况,只需要把 fid1=fopen('piture.txt','w'); 换成,就可以了 fi ...

  5. matlab查找替换指令,使用matlab GUI在.txt文件中编辑特定数字使用搜索/替换

    使用matlab GUI在.txt文件中编辑特定数字使用搜索/替换 我有一堆不同的模板.txt文件,我想由Matlab中的用户访问.这些模板看起来像这样,但是有一些主要的区别,我将解释: LOAD B ...

  6. 用Matlab把 .txt文件中的16进制数据转换成2进制数据

    问题描述 使用Matlab将.txt文本文件里面存放的16进制数据转换成2进制数据,放入一个新的.txt文件中.直接附代码解释,第一次发文章,仅为了练习使用和记录. clear; clc; fid = ...

  7. MATLAB将数据存在TXT文件中

    %%记录结果,将数据保存到txt文件中 fid = fopen('结果记录.txt','a'); %结果记录.txt是存储数据的文件,a是数据向后增加的意思 fprintf(fid,'%f\t',hz ...

  8. python导入txt文件并绘图-Python实现读取txt文件中的数据并绘制出图形操作示例

    本文实例讲述了Python实现读取txt文件中的数据并绘制出图形操作.分享给大家供大家参考,具体如下: 下面的是某一文本文件中的数据. 6.1101,17.592 5.5277,9.1302 8.51 ...

  9. 用python读取txt文件中的数据并画各类图形展示_Python实现读取txt文件中的数据并绘制出图形操作示例...

    本文实例讲述了Python实现读取txt文件中的数据并绘制出图形操作.分享给大家供大家参考,具体如下: 下面的是某一文本文件中的数据. 6.1101,17.592 5.5277,9.1302 8.51 ...

最新文章

  1. 【深度学习】CVPR 2022 | 百变发型!中科大/微软/港城大提出HairCLIP:基于文本和参考图像的头发编辑方法...
  2. Vue项目端口号占用
  3. 解决切换场景时NGUI图集资源未释放的问题
  4. 将桌面文件映射至E盘
  5. 自解压shell文件的制作
  6. 焊接工时简便计算工具_2020年新版机械加工工时费用计算(17页)-原创力文档...
  7. Struts2 验证码图片实例
  8. 织梦网站建设广告网络公司网站模板 电脑+手机 整站源码
  9. C# 开发安卓手机应用
  10. 角动量守恒与陀螺力矩
  11. linux的wifi探针源码,运用在公共安全领域的WiFi探针
  12. Linux入坑手册(鸟哥的私房菜)
  13. Java--制作乱字游戏
  14. 把音频中的某个人声去掉_怎样去掉音频中的背景音乐 只保留人声?
  15. ROC曲线,AUC面积
  16. 薛兆丰经济学思维研究:权利的经济学讨论
  17. 如何安装linux服务器
  18. python项目实战:获取实时新浪微博热搜
  19. 怎么恢复回收站清空删除的文件
  20. 代码签名证书的时间戳验证码签名方法

热门文章

  1. 碳排放交易平台的建设方案分享
  2. KiCad 的安装教程
  3. 线性表(单向)链式存储 - Java实现
  4. 某部门财政预算预测表模板下载
  5. 2、OmniGraffle系列-表格
  6. 【嵌入式知识07】借助stm32CubeMX,使用STM32F103C8T6点亮LED流水灯
  7. 华尔街日报专访李彦宏:明年年底前,百度将打造一辆无人公车
  8. Android databinding之数据单向与双向绑定详解与使用(三)
  9. css魔幻属性跟进篇
  10. ffmpeg h264转avi学习笔记