MATLAB 读取和写出Excel文件的方法-单个以及自动循环读写多个情况

 一.读取数据

1.用xlsread函数读取一个Excel文件

(1)num=xlsread(filename)
filename是单引号括起来的带路径的文件名,函数直接读取filename所指文件的sheet1中的数据区域存储到双精度矩阵num中;其中,数据区域的选取规则是:对表格前几个含有非数值的行(列)直接忽略,不算入数据区域;另外如果在数据区域中含有非数值的单元,将其处理为nan。


(2)num = xlsread(filename, -1)
输入后matlab将会打开相应的exel文件,用鼠标选择需要导入的数据区域,可以切换到想要的sheet。
(3)num = xlsread(filename, sheet)
其中sheet用来指定读入excel文件的第几个sheet,此时的sheet取值大于1的整数。


(4)num = xlsread(filename,sheet, 'range')
其中range指定一个矩形的区域,用单引号括起来;例如:'D2:H4'代表以D2和H4为对角定点的矩形域;
注意当excel中有合并单元格时,任何一个合并前的单元格的名字(比如D1)都会指代整个合并后的单元格,而将整个单元格读入,所以为了避免麻烦,尽量避免在需要读入的表格中合并单元格。

例如:将读取D盘下的一个文件路径为:D:/test/daxia.xls
num = xlsread('d:/test/daxia.xls',2,'D2:H4')读取sheet2的D2:H4区域数据
如果要进行交互式的选择用:num= xlsread('d:/test/daxia.xls',-1)

2.批量的文件要读取


首先将多个文件进行批量重命名例如daxia1.xls,daxia2.xls,daxia3.xls,...
然后用循环的方式实现:
for i=1:100
    filename=['d:/test/daxia',num2str(i),'.xls'];
    num=xlsread(filename)
end

 

[NUM,TXT,RAW]=xlsread('filename')  读出excel中所有的数据包括文字: NUM返回的是excel中的数据,TXT输出的是文本内容,RAW输出的是未处理数据,这里因为文本占用的矩阵一共是8行6列,所以就输出了如上内容。一般情况下,我们读取的都是excel中的数据,所以可以直接用[NUM]=xlsread('example'),只输出数据矩阵便可。

Num中属于精度double类型,只能读取文档中的数字,如果有一列不是数字,那么就会返回NaN,;txt属于cell类型可以读取文本,raw也为cell类型既可以读取数字可以读取文本并且每一列的值不需要是同一个类型的,但是在数组为空的时候,txt返回空值,raw返NaN。

 

例1:data.xlsx中的数据为:

 

 1.  a= xlsread('data.xlsx')  ,则返回值为:

 

 2.   a = xlsread('data.xlsx',sheet,'B2:C6') ,则返回值为:

 

 3.    [num,txt,raw,custom] = xlsread('data.xlsx')  ,则返回值为:

 

 

 

 

 

 例2:给出pailie3.xlsx部分数据

  

 

 1.fid = xlsread('pailie3.xlsx');

 

 第二列为字符串,读出来显示NaN (Not a Number,不是数字),且fid类型为double

2.[num,txt,raw] = xlsread('pailie3.xlsx');

 

 num 为double 类型

txt为cell类型,只有第二列和第11列被读出来

raw为cell类型,能同时读取字符或者数字。

总结:只需要操作数据时可以使用1中读取方法或者使用num;当需要操作字符时,可以使用txt;raw是通用的。

 

转自https://blog.csdn.net/qq_41325698/article/details/95251829

参考https://blog.csdn.net/qq_43392493/article/details/100528582

          https://blog.csdn.net/roytao2/article/details/54098053?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.channel_param

详细参考matlab Help 文档:

注意https://www.mathworks.com/help/matlab/ref/xlsread.html

xlsread只读取7位ASCII字符。xlsread不支持非连续范围。

二. 写入数据

1.写入单个文件

(1)xlswrite(filename,A)   将矩阵A写入Microsoft®Excel®电子表格工作簿中的第一个工作表,文件名从单元格A1开始。

(2)xlswrite(filename,A,sheet)   写入指定的工作表。sheet为正整数,

(3)xlswrite(filename,A,xlRange)   写入到工作簿的第一个工作表中由xlRange指定的矩形区域。使用Excel范围语法,如“A1:C3”。

(4)xlswrite(filename,A,sheet,xlRange)   写入指定的工作表和范围。

(5)status = xlswrite(___)          使用前面语法中的任何输入参数返回写操作的状态。 当操作成功时,状态为1。否则,状态为0。

(6)[status,message] = xlswrite(___)    在结构消息中返回由写操作生成的任何警告或错误消息。

filename是需要保存的文件路径,只写文件名,保存为当前路径,在matlab界面左侧的文件树下即为当前路径;如果filename中有路径和文件名就会保存至指定路径

A是要保存的变量,如x,x'为转置,可以竖直输出 ;  sheet是excel的页数,输入整数便可以指定对应sheet ; xlRange是保存的单元格位置,‘A3'为从A3单元格开始输入‘A3:D8'为保存单元格区域

status为1读取成功,0为读取失败; message为输出的报错信息

 

2. xlswrite函数输出多个文件时,如何自动更改文件名?

核心思想:利用num2str将数值转换成字符串写入xlswrite函数里面。

用for循环可以实现
假设N是误差矩阵的个数
for i=1:N
     xlswrite(['误差' num2str(i) '.xlsx'],wucha,'sheet1','A1'); 
end

从sheet1中的A1开始写,wucha--指自己要写入的数据,方括号里面的指的是每一自动更改名称的表达式

参考:https://zhidao.baidu.com/question/470310196.html

         https://www.mathworks.com/help/matlab/ref/xlswrite.html

posted @ 2020-10-02 11:09  试一下就知道了  阅读(11813)  评论(0编辑  收藏  举报