本例程实现在matlab app,其实在matlab中也可以实现同样的存储功能,存储在excel中。但是大多数的存储都是在不同的sheet中,随着sheet的增加,回读和查看都比较麻烦。我这个程序可以把数据存储在一个sheet中,每一列存储所有数据,并且一列中可以存储不同的格式,可以实现循环存储,对于不同格式的数据不但能够避开存储sheet过多的问题,回读也较为方便。
首先定义一个自变量:num_k=1;
对于采集到的数据,我们假设为X,Y,他们可以是单个数据,也可以是数组类型。
在存储时候可以定义当前存储的日期,代码是:
Tdata =datestr(now,'yyyy-mm-dd HH:MM:SS'); %获取当前时间
Save_data= [X,Y];%把X,Y放到一个数组中存储,注意对于数组X,Y维度应该一致; 由于excel中是26进制数,因此需要由十进制转换为26进制;
在app中我们可以这样调用函数:num2abc2(num_k)的函数定义在最下方。
Num_m=app.num2abc2(num_k);
A_num = [Num_m,'1']; %控制excel中每一列的第一个单元格A1;
B_num = [Num_m,'2']; %控制excel中每一列的从第二到其余的单元格A2;
%把时间存储在第一个单元格;
writematrix(Tdata,"C:\Users\caixu\Desktop\测量曲线.xlsx", "Sheet",1, "Range", A_num);
%把X Y的值存储在每列的从第二个单元格开始
writematrix(Save_data,"C:\Users\caixu\Desktop\测量曲线.xlsx","Sheet",1, "Range",B_num);
num_k = num_k+1; %把A_num和B_num变为B和B;即存储变为第二列
得到的最终结果如图,在循环的存储中,每一列存储一次数据,第一个单元是时间,第二个是X,单个数,从第二个到第10个单元格式数组Y。
%将10进制转换为26进制字母的函数
function str_=num2abc2(app,num)
string={'A','B','C','D','E','F','G',...
'H','I','J','K','L','M','N','O',...
'P','Q','R','S','T','U','V','W','X','Y','Z'};
str_=[];
while num>0
m=mod(num,26);
if m==0
m=26;
end
str_=[str_ string{m}];
num=(num-m)/26;
end
str_=fliplr(str_);
end