94117239 发表于 2007-10-9 16:34

发一个读写.xls文件的程序

这两天帮华工的一个博导用matlab处理工程数据,写了一个读写.xls的程序,现在发上来源程序,仅供初学者参考,敬请高手指教,敬请拍砖

主程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
clear all
%%%%%%%%开始读取原始数据
filename='lb025.xls';%滤波后数据存储的文件名,不要更改.xls后缀
filename2='d:\\025.xls';%将要滤波的文件路径\\不要更改
sheet='4';%读取excel文档名称为4的表单
t=xlsread(filename2,sheet,'a10:a56');%读取a10到a56的数据,可以根据实际情况更改以满足实际需要
y1=xlsread(filename2,sheet,'f10:f56');
t1=0.05:0.05:23.5;%路基宽度根据实际情况更改
t1=t1';
y11=resample(y1,10,1);%按10:1重新采样使曲线更平滑
a1=denoise(y11,5,'db8')%a=denoise(s,lev,INH) s为待滤波信号,lev是分解层数,一般取3~7,INH为滤波小波基可采用db2~db10,sym2~sym8,coif1~coif5,dmey等等
xlswrite(filename,t1,'a1:a470');
xlswrite(filename,a1,'b1:b470');
figure(1);
subplot(3,1,1);plot(t,y1);
title('原始数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
subplot(3,1,2);plot(t1,y11);
title('重采样数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
subplot(3,1,3);plot(t1,a1);
title('滤波数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
y2=xlsread(filename2,sheet,'j10:j56');
y21=resample(y2,10,1);
a2=denoise(y21,5,'db8')
xlswrite(filename,a2,'c1:c470');
figure(2);
subplot(3,1,1);plot(t,y2);
title('原始数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
subplot(3,1,2);plot(t1,y21);
title('重采样数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
subplot(3,1,3);plot(t1,a2);
title('滤波数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
y3=xlsread(filename2,sheet,'n10:n56');
y31=resample(y3,10,1);
a3=denoise(y31,5,'dmey')
xlswrite(filename,a3,'d1:d470');
figure(3);
subplot(3,1,1);plot(t,y3);
title('原始数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
subplot(3,1,2);plot(t1,y31);
title('重采样数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
subplot(3,1,3);plot(t1,a3);
title('滤波数据曲线');
xlabel('观测点位置(m)');
ylabel('沉降量s(mm)');
grid
%%%提取滤波后原始观测位置对应的数据
lbt=xlsread(filename,'sheet1','a1:a470');
lbt1=lbt(10:10:end);
lby1=xlsread(filename,'sheet1','b1:b470');
lby11=lby1(10:10:end);
lby2=xlsread(filename,'sheet1','c1:c470');
lby21=lby2(10:10:end);
lby3=xlsread(filename,'sheet1','d1:d470');
lby31=lby3(10:10:end);
xlswrite(filename,lbt1,'f1:f47');
xlswrite(filename,lby11,'g1:g47');
xlswrite(filename,lby21,'h1:h47');
xlswrite(filename,lby31,'i1:i47');

denoise.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%实现小波去噪
function a=denoise(s,lev,INH)
=wavedec(s,lev,INH);
a=wrcoef('a',c,l,INH,lev);


以上两段程序都保存为m文件,后者必须是denoise.m,放在同一个文件夹下面
execl文件,把.doc改为.xls放在d盘根目录下,当然也可以更改源程序放在任意位置,尽量不要放在中文目录下面

[ 本帖最后由 94117239 于 2007-10-9 16:57 编辑 ]

花如月 发表于 2007-10-9 16:38

可否把xls数据也分享一下?这样这个例子就完整了。

94117239 发表于 2007-10-9 16:58

已经上传excel文件了

siwamm 发表于 2007-11-9 16:36

子程序编译不过去,说是语法错误...

花如月 发表于 2007-11-9 17:33

回复 #4 siwamm 的帖子

我试过的没有问题

把你的错误提示帖上来

siwamm 发表于 2007-11-9 21:30

滤波的这段程序调不通

function a=denoise(s,lev,INH)
=wavedec(s,lev,INH);
a=wrcoef('a',c,l,INH,lev);


function a=denoise(s,lev,INH)
=WAVEDEC(s,lev,'i');
a=wrcoef('a',c,l,'i',lev);
这是我修改的代码,但是程序还是在第二行中止了

siwamm 发表于 2007-11-9 21:39

这是修改过的运行结果:
??? Input argument "s" is undefined.
Error in ==> denoise4 at 4
=WAVEDEC(s,lev,'i');

没有修改的运行结果大概是:
function definitions are not permitted at the prompt or in scripts.
设置短点运行结果主要是
“syntax error”

[ 本帖最后由 siwamm 于 2007-11-9 22:10 编辑 ]

花如月 发表于 2007-11-10 20:29

回复 #7 siwamm 的帖子

function a=denoise(s,lev,INH)
=wavedec(s,lev,INH);
a=wrcoef('a',c,l,INH,lev);
保存成denoise.m文件与工作目录下

然后再运行主程序

siwamm 发表于 2007-11-10 21:12

Matlab新手,多指教:@)
附件中是测得的部分实验数据,我先把滤波部分去掉了,现在可以得到采样数据
下面是改过的代码,请教错在什么地方?

我用的是Matlab7.运行错误是:
???Attempt to execute SCRIPT plot as a function.

Error in==〉plot4 at 14
subplot(3,1,1);plot(t,y1);


clc
clear all
%%%%%%%%开始读取原始数据
filename='lb025.xls';%采样后数据存储的文件名
filename2='d:\025.xls';%将要采样的文件路径
sheet='sheet1';%读取excel文档名称为1的表单
t=xlsread(filename2,sheet,'a1:a32');%读取a10到a56的数据,可以根据实际情况更改以满足实际需要
y1=xlsread(filename2,sheet,'e1:e32');
t1=0.05:0.05:23.5;
t1=t1';
y11=resample(y1,10,1);%按10:1重新采样使曲线更平滑
xlswrite(filename,t1,'a1:a320');
xlswrite(filename,a1,'b1:b320');
figure(1);
subplot(3,1,1);plot(t,y1);
title('原始数据曲线');
xlabel('节点数量(K)');
ylabel('请求成功率');
grid
subplot(3,1,2);plot(t1,y11);
title('重采样数据曲线');
xlabel('节点数量(K)');
ylabel('请求成功率');
grid

siwamm 发表于 2007-11-10 22:23

运行楼主的程序,不知道是Matlab版本的原因,还是我的系统的问题,图还是画不了.
结果还是:
???Attempt to execute SCRIPT plot as a function.

Error in==〉plot4 at 14
subplot(3,1,1);plot(t,y1);

不过可得到滤波数据

a1 =

    5.1768
    5.1608
    ...

[ 本帖最后由 siwamm 于 2007-11-10 22:26 编辑 ]

eight 发表于 2007-11-16 18:15

原帖由 siwamm 于 2007-11-10 22:23 发表 http://www.chinavib.com/forum/images/common/back.gif
运行楼主的程序,不知道是Matlab版本的原因,还是我的系统的问题,图还是画不了.
结果还是:
???Attempt to execute SCRIPT plot as a function.

Error in==〉plot4 at 14
subplot(3,1,1);plot(t,y ...
请看看关于新手的经验帖子

bjshm2005 发表于 2007-11-16 22:49

xlsread也可以调用.xls文件阿

ljxfighting 发表于 2007-12-5 16:00

我是一句一句运行的,没有保存成.m文件,
filename='F:\xinhao2\jiechu-2\45+n6.xls';
sheet='1';
t = xlsread(filename,sheet,'a10:a56');
也提示我错误:??? Error using ==> xlsread
Too many input arguments.
Error in ==> d:\MATLAB6p5\work\myexcel.m
On line 3==> t = xlsread(filename,sheet,'a10:a56');
请问这是怎么回事?

我的实验数据也是既有汉字又有数字的,可是用上面的三行程序却出现错误,迫切需要和楼主交流,请楼主留下QQ号或加我QQ:93767953,谢谢了

[ 本帖最后由 ljxfighting 于 2007-12-5 18:56 编辑 ]

花如月 发表于 2007-12-5 21:59

回复 #13 ljxfighting 的帖子

你的matlab是什么版本的?

ljxfighting 发表于 2007-12-6 13:22

回复 #14 花如月 的帖子

6.5的。
页: [1] 2
查看完整版本: 发一个读写.xls文件的程序