Matlab应用笔记——批量读取Excel文件
小树不修不直溜,人不学习哏啾啾。各位家人们都还好吗,今年的三月注定又是个今生难忘的春季,不知道多少朋友和本喵一样在“封闭抗疫”。又有多少面临毕业季的小伙伴,在封闭的校园中,奋笔疾书。鼓励的废话不必多言,直接开始本篇的正题:如何用MATLAB编程实现批量读取表格(EXCEL)数据。本篇文章中的代码思路参照过CSDN、知乎等一些大神们的讲解,结合本喵的工作实践经历进行撰写,力求详尽讲解,小白式教学,如有雷同,纯属巧合。
一、数据准备工作
本文代码环境为:MATLAB2016b,其他版本代码有效性,有待考证。编写代码前,需要把需要批量读取的表格(EXCEL)存储到同一个文件夹里,如下图所示。
图1、准备表格文件数据
二、MATLAB编程
直接上代码,新建一个.m文件,编写如下代码:
%路径初始化
excel_path=‘C:\Users\18029\Desktop\CSDN\批量读取\DK’;%这条是第2行代码
data_path_list=dir(excel_path);
data_name=(string({data_path_list.name}))’;
DX_data_name=data_name(3:length(data_name),1);
%批量读取,并将数据存到数组“C”的一列中
X=xlsread(‘C:\Users\18029\Desktop\CSDN\批量读取\DK\DK2021.06.01.xls’);
m=length(X);
n=length(DX_data_name);
for i=1:n
A=xlsread(char(strcat(excel_path,DX_data_name(i))));
for j=0:n-1
C(1+jm:m(j+1),1)=A;
end
end
%保存读取到的全部数据到表格“CBRtest”中
xlswrite(‘C:\Users\18029\Desktop\CBRtest.xls’,C);
三、代码说明
上述代码,功能上分为三部份,分别为:构建读取路径、批量读取并转化为列数组、存储批量数据,三者逐一展开说明如下:
3.1、构建读取路径
首先创建表格文件夹的寻址路径(基路径)“excel_path”如第2行代码所示,寻址路径的查找操作如下:右键点击文件夹中需要读取的.xls(.xlsx)文件,下拉菜单中点击“属性”,如下图所示的对话框中将“位置”处(图中红框)的地址“复制”后,“粘贴”到代码中即可。当然存储数据的位置因人而异,文件夹的地址也各不相同,此处介绍的仅仅是查找文件路径的经验方法。
图2、表格文件基路径
代码的第3行,用到MATLAB的“dir”函数,如下图的结果所示,这个函数的功能,从本喵自己的理解来看,是将文件夹内的所有文件信息以“结构体(struct)”的形式存储,其中文件信息包括:文件名、所在路径、文件存储日期、文件大小等,其中后续代码中需要用到“文件名”信息,同时细心的小伙伴已经发现“结构体”中“文件名”一列的前两行并不是表格名称,后续代码中会进行处理。
图3、样本文件信息结构体
第4行代码中用到“string”函数,为下一部分的“完整文件路径”做准备,此处注意“结构体”数据的单一项名称格式“{data_path_list.name}”。第5行代码中解决“结构体”中前两行“文件名”数据异常的问题,设置新“文件名”数组“DX_data_name”从旧“文件名”数组data_name的第3行开始一直到最后,此处使用“length”函数,直接得到旧“文件名”数组data_name的长度(即最后一行的“行号”)。得到的“新”(黄框)、“旧”(红框)文件名数组对比结果,如下图所示。
图4、新旧文件名数组
3.2、批量读取并转化为列数组
此部分实现批量读取并将读取到的数据,转存到临时数组“C”。思路上自然而然地想到“循环”结构,此处既涉及到“批量读取文件”有涉及到“批量读取文件内数据”,顺理成章地用到“循环嵌套”结构。
使用“循环”结构,涉及到循环次数设置的问题,为了实现程序功能,需要设置两个循环次数,如代码中第7~10行所示,首先用“xlsread”函数(第8行代码)读取一个样本文件,查找样本文件的寻址路径方法与之前相同,读取样本文件的目的是:为了第9行代码“length”函数得到文件中的数据量,以设置“批量读取文件内数据”的循环次数,当然第8、9行代码可以合并成一条,本文为详尽讲解才将其分开。
而设置“批量读取文件”的循环次数相对简单,直接利用“length”函数读取新“文件名”数组“DX_data_name”长度即可。本文中的样本文件总数为“10”;样本文件数据总量均相同为“1440”,代码运行结果如下图所示。
图5、循环数设置
在第11~16行代码利用for循环实现这部分功能,外层循环中利用“strcat”拼接字符串函数将“文件夹基路径”(excel_path)与“文件名”(例:DK2021.06.01.xls),组合成完整的路径字符串,但由于读取数据需要使用到“xlsread”函数的输入量必须为字符型数据(char),因此利用“char”函数进行数据类型转换,二者对比结果如下图所示。
图6、文件读取路径拼接
3.3、存储批量数据
直接利用“xlswrite”函数将存储在临时数组“C”中的全部数据,写到想要存储的表格中,使用“xlswrite”函数,其中的存储路径中可以存储到已有的表格文件,也可以存储到想要新建的表格文件中。本文的存储测试文件为“CBRtest.xls”,随便起的名,其结果如下图所示,每个样本文件的数据量为1440,共计10个文件,总数据量为14400。
图7、批量读取数据结果
分享完毕,总结至此,希望能为有需求的小伙伴提供思路,也希望能在这个“金钱至上”的社会,给大家提供更多免费的学习资源。
良心博主,且看且珍惜,如需分享,表明转载,小弟不胜感激!