您的当前位置:首页正文

Matlab提取Excel文件中部分内容

2021-02-03 来源:爱go旅游网
Matlab提取Excel文件中部分内容

Excel表格整表操作十分方便,xlsread函数支持对表单的操作,也支持对某个矩形区域的操作。

比如要求把一表格的'A4:A6','C2:C4','E3:E5'的内容连续保存在新表格中。连续保存没什么,重点是将不连续的区域读出来,虽然多次读取可以实现,但是如果读取海量表格中的几百列,几千这种方法就没有效率可言了,所以需要将表格的标号放到循环中去处理,让循环来代替手动读取,这样即使成千上万遍的读取也没有问题。代码如下: 复制内容到剪贴板 代码:

str={'A4:A6','C2:C4','E3:E5'}; data=[]; for ii=1:3

A = xlsread('ff.xls', 1, str{ii}); data=[data,A];

end

data中保存的就是从不连续的区域读取来的内容。

上例中虽然读取方便,但是位置字符串设置仍不够方便,如果设置几百个或者几千个字符串位置,也够累的,所以可以将字符串中的数字也用循环变量来代替。 复制内容到剪贴板 代码:

str=['A','C'];

data=[]; for jj=1:2; for ii=1:3

A = xlsread('ff.xls', 1, [str(jj),num2str(ii)]) data=[data,A]; end

end

上述就是读取A1:A3和C1:C3单元的内容。

filename1=ls('*xls');%取得所用excel文件 filename=cellstr(filename1);

num=length(filename);%得到excel文件的个数 for ii=1:num

M=xlsread(filename{ii}); %执行对矩阵M的处理代码 end

data=load('路径\\文件.xls'); data=xlsread('路径\\文件.xls');

可以通过Excel link 将Excel和MATLAB链接起来,就可以将Excel里面的数据以矩阵的形式导入MATLAB的工作区间workspace中,

Excel link 的安装

(1)启动Excel

(2)单击工具加载宏命令,在弹出的加载宏对话窗口中单击浏览按钮。

(3)在D:\\MATLAB7\oolbox\\exlink(假设MATLAB安装在D:\\下)下选中文件exlink.xla; (4)返回加载宏对话窗口,单击确定按钮,Excel link 则被加载到Excel中了。

此时在Excel的工具栏上就会出现startmatlab,putmatrix,getmatrix,evalsring四个按钮(如果是2003版的Excel),如果Excel为2007版的,这这些按钮在菜单加载项里。

Excel link 的使用

在Excel选中数据,然后选择putmatrix按钮,按提示一步一步的往下,就可以将选中的Excel中的数据以矩阵的形式导入到Matlab workspace中了。 Matlab的GUI也可以用这些数据了。

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。

xlsread('路径\\文件名.xls','sheet名','起始位置:终止位置')

num = xlsread(filename)

从指定文件名夹读取,比如说num=xlsread('data.xls'),即从当前程序所在文件夹里,从A1单元格开始读取,读取data.xls文件,把数据返回给num。 num = xlsread(filename, -1)

用户可以使用鼠标选择单元格范围。 num = xlsread(filename, sheet)

选择所在的sheet,比如说'sheet1'。 num = xlsread(filename, range)

所在的单元格范围,比如说range='A1:A8'。 num = xlsread(filename, sheet, range) sheet和单元格范围同时限制。

num = xlsread(filename, sheet, range, 'basic') book.iLoveMatlab.cn 电脑上没有安装Microsoft Excel的话,可以使用此方法

num = xlsread(filename, ..., functionhandle)

把所获得的数据,传递给指定的函数句柄,属于高级编程的范畴! [num, txt]= xlsread(filename, ...) 把返回的数据与文本分开保存。 [num, txt, raw] = xlsread(filename, ...)

分开保存的同时,有把num和txt保存到raw里,形成一个单一变量。 [num, txt, raw, X] = xlsread(filename, ..., functionhandle) 通函数句柄类似 book.iLoveMatlab.cn xlsread filename sheet range basic

命令行模式(简化模式) book.iLoveMatlab.cn

因篇幅问题不能全部显示,请点此查看更多更全内容