最近在用matlab处理采集到的数据,这些数据都是按照一定的格式存入excel文件中的,每天对应产生一个文件。这些表格数量较多,所以通过matlab进行批量读取和处理。
在读取过程最重要的函数是xlsread函数,使用该函数可以方便的读取excel文件的数值、文本等,
num = xlsread(filename,sheet,xlRange)
通过这条函数可以获取指定文件指定表的指定范围的数值。为了能够循环读取,可以构造filename,读取多个文件。
%% 获得指标数据
yue = 7; %
A=[];
B=[];
num=[31,28,31,30,31,30,31,31,30,31,30,31];
xlRange =[ {'S2'},{'B3'},{'l26'},{'j28'},{'q26'}];
%
tic
for xx=1:1:length(xlRange);%5个数据
A=[];
for mon=1:1:yue;
for day=1:1:num(mon);
filename=['2018年',num2str(mon),'月', num2str(day),'日指标.xls']
sheet = '日报';
subsetA= xlsread(filename,sheet,char(xlRange(xx)));
if(isempty(subsetA))
subsetA=NaN;
end
A=[A;subsetA];
end
end
B=[B A];
end
toc
解决了需要从多个表里找数据的问题,另外可以通过下面的方法读取表格的文本数据
[num,txt,raw] = xlsread(___)
在使用时发现这样读取文件特别费时,为了能够快速处理,打算将所有的文件读入内存,在内存里查找需要的数据
clear
clc
yue = 7; %
num=[31,28,31,30,31,30,31,31,30,31,30,31];
sheet = {'0点班 ','8点班','16点班','日报'};
BO=cell(2,length(sheet));
tic
for xx=1:1:length(sheet);%
nu=[];tx=[];id=0;nid=0;tid=0;
for mon=1:1:yue;
for day=1:1:num(mon);
filename=['2018年',num2str(mon),'月', num2str(day),'日指标.xls']
[number,txt] = xlsread(filename,char(sheet(xx)) );
[len1 sz1]=size(nu);
[len2 sz2]=size(number);
len=len2-len1;
if(len>0)
nu=[nu;NaN(len,sz1)];
end
if(len<0)
number=[number;NaN(-len,sz2)];
end
nu=[nu number];%tx=[tx txt];%向右
id=id+1;[n nid(id+1)]=size(nu);[n tid(id+1)]=size(tx);
end
end
tid(id+1)=[]; nid(id+1)=[];
BO{1,xx}=nu;BO{2,xx}=nid;
end
toc
效果不错,读取文件之后速度飞快。解决目前处理数据的数据获取难题。