扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要为大家展示了“matlab如何读取excel中的数据”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“matlab如何读取excel中的数据”这篇文章吧。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网页空间、营销软件、网站建设、西吉网站维护、网站推广。
问题背景:有两份系内人员名单的表格,其中一个是系内所有人员的名单(参加实训的名单中有三个人在总名单里没有录),一个是参加某项实训的人的名单,并非系内所有人都参加了这次实训(我就是其中没参加的一个)。那么现在要通过这两张表格筛选出没有参加的人的名单。
方法一:用眼睛找累死你,(虽然只有一百多人但是也够折腾的)
方法二:我不知道用excel内置的函数怎么实现,可能比较麻烦把
方法三:用编程语言来实现,(我只会matlab)
思路1:导入两个Excel中人名的数据分别存在两个cell中,用两层循环遍历它两,对每个元素进行比较,如果相同就把总名单的的那个元素置空。(外层是总名单,内层是参加实训的人的名单)
思路2:导入两个Excel中人名的数据合并到一块,然后用我之前讲过的数组去重的一个好方法来去重(类似于,不能照搬,稍微改动),那剩下的不就是没参加的人的名单么
有一个BUG:两个人名一模一样,那就去比较学号把
进行编程前,我需要先讲一下matlab如何读excel中的数据。
xlsread函数可以帮助我们读取excel。
这里简单讲一个用法把
[num , txt , raw] = xlsread(filename)
Note:
num是指定excel中的数值部分
txt是指定excel中的文本部分,txt是一个元胞
raw数值文本在一块,raw是一个元胞
不想要的用~来代替,不用~也行,反正你又不用,放那又不碍事
filename是指定excel的文件名(带拓展名)
其余的用法读者自行help一下,,输入参数还可以带上excel中的范围,
第几个sheet,等
思路1的Code:
clear
clc
[num_list,name_list]=xlsread('name_list.xlsx');% 导入总名单
[num_practice,name_practice]=xlsread('practice_list.xlsx');% 导入参加实训人的名单
for i=1:length(name_list)%对总名单遍历
name1=name_list{i};
for j=1:length(name_practice)%对实训名单遍历
name2=name_practice{j};
if strcmpi(name1,name2)==1%看一下实训名单中的人名是否出现在总名单中
name_list{i}=[];%如果出现就把总名单中的这个元素置空
%这里你不能用小括号啊,用小括号每一次外层循环结束后都可能会把name_list给减少一个维度
%然后中途就可能会出现索引抽出矩阵的维度的情况
%用小括号,就直接把大cell中的一个小cell给删去了
%用大括号,是把大cell中的小cell中的元素设为空,小cell还是存在的
break
end
end
end
%还记得cellfun么?不记得的话翻以前的文章去(直接点这句话就行)
disp(name_list(~cellfun('isempty', name_list)))
Result:运行代码的一秒钟后
思路2的Code:
clear
clc
[num_list,name_list]=xlsread('name_list.xlsx');% 导入总名单
[num_practice,name_practice]=xlsread('practice_list.xlsx');% 导入参加实训人的名单
WholeName = [name_list;name_practice];%合并两个名单
%下面对WholeName中的人名去重
names = {};
cnt = 0;
%思路就是两个名单叠一块一定有重名;
%有重名那么我下面的ind中一定有两个或两个以上的元素,把他们置空;
%如果是非重元素,则单独保存后再置空;
%由于实训名单中最后添加了三个总名单中没有的人名。
%所以用本方法会比上一种方法多出三个人来,
%不过这不影响,就是数据录入的问题
while ~isempty(WholeName)
ind = find(strcmp(WholeName{1},WholeName) == 1);
if length(ind) >= 2
WholeName(ind) = [];
else
cnt = cnt + 1;
names{cnt} = WholeName{1};
WholeName(1) = [];
end
end
disp(names')
Result:(多出三个人名,为什么请看Code的注释)运行代码的一秒钟后
这个方法二是写着写着想起来的,,配合着回顾之前学的东西。
以上是“matlab如何读取excel中的数据”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流