在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
转自http://blog.sina.com.cn/s/blog_6aaea1760100r08x.html 总结出以下几种MATLAB读写excel数据的情况:
1、读取当前路径下的excel表格,存储数据,文字字符 [number,txt,raw]=xlsread(‘file.xls’); 其中:file为所要读取的excel; number中含有file.xls中的数据,不包含表头,如果遇到有非数字的字符则为NaN; txt中含有file.xls中的所有非数字字符,包含表头,遇见数字则为空字符; raw中存储的是file.xls中的原始数据,不做任何处理,也包含表头。 注1:输入参数中.xls可以不写;输出参数可以缺省,只有一个参数只取数字,两个含字符; 注2:文件名和表格中的内容均允许有汉字的存在。 例1:当前路径下有名为0520的excel表格。其中内容如下图1: 在MATLAB中执行命令:[number,txt,raw]=xlsread('0520') 结果如下:
2、读取指定路径下的excel表格,存储数据,文字字符 [number,txt,raw]=xlsread(‘address’); 其中:address为所要读取的excel表格的地址; number中含有表格中的数据,不包含表头,如果遇到有非数字的字符则为NaN; txt中含有表格中的所有非数字字符,包含表头,遇见数字则为空字符; raw中存储的是表格中的原始数据,不做任何处理,也包含表头。 例2:[number,txt,raw]=xlsread('D:\My Documents\MATLAB\shudu\0520') 结果如上面图2。 注1:本例中的表格将英文改成汉字,验证效果是一样的,MATLAB读表允许汉字存在。
3、读取指定表格指定区域的内容 [number,txt,raw]=xlsread('file.xls or address','Sheet','range') 其中:‘Sheet1’是指定页数的表格,可以是自命名,如‘初级题40’; ‘a1:c3’是读取的范围,是从a1到c3的矩形区域; 其他输入输出参数与前面一致。 注1:里面的‘Sheet1’和‘sheet1’,‘a1:c3’和‘A1:C3’效果等同,即不区分大小写 例3:[number,txt,raw]=xlsread('0520','Sheet1','a1:c3')
4、读取区域含有空白或者字符,需要用特定数值替代 对于所读取的数据有时达不到自己的需求,比如,表格中有空白位置,读出来就是“NaN”,例如本人所要做的数独解题,题目中只有部分位置是非零数字,其余为空白待填,这时xlsread命令会直接将表格中的空白位置用“NaN”替代,如下图4(1): A= xlsread('数独题目.xls','a121:i129') 由上面结果可知,“NaN”替代了所有空白位置。但这样有时并不适合进行MATLAB运算,比如填数独就是。这时需要将这些空白位置用特定的值替代,这里我们可以用以下命令将空白位置全部赋成0 A(isnan(A))=0, 结果如下图4(2): 图4(2) 注1:isnan函数判断是否为nan,是返回1,否则返回0。
5、动态区域读取 前面所读取的excel区域是固定的,比如是‘Sheet1’的‘A1:C3’,但可能会碰到区域不是固定的,比如我要随机选取数独题,事先无法得知选哪个题,也就无法确定范围,这时就碰到如何读取动态区域的问题。方法其实和前面类似,关键是获取动态的字符串即可。如果需要获取动态区域的数值,需要用到字符串转换将数字转成字符串。 例5:数独难度有“初级”、“高级”、“专家级”和“骨灰级”,放在excel表“数独题目”中,每个级别有40个题目。先让用户选取难度即被,再随机选取1到40题中的一题。 步骤如下: Step1:选取难度,可以用menu命令制作选取菜单
lever = menu('select a lever','primary','senior','experts','hardcore');
Step2:随机选题,确定题号和起始位置 n=randint(1,1,[1,40]); %%%%选取1到40中的随机数一个 fprintf('question number is %d\n',n) start=(n-1)*10+1; %%%%确定起始位置
Step3:获取区域的动态字符串,使用字符串拼接,需要将数字转成字符 cxd1='a'; cxd2=num2str(start); %%%%数字转字符 cxd3=':'; cxd4='i'; cxd5=num2str(start+8); cxd=[cxd1 cxd2 cxd3 cxd4 cxd5]; %%%%动态区域
Step4:读取表格,并把空白位置置零 A = xlsread('D:\暂存\数独大全\数独题目.xls',sheet,cxd); A(isnan(A))=0;
结果如下图5(1)和5(2):先从菜单选取“primary”,抽中第37题。
6、数据写入excel中 方法和读取类似,不再说明,直接上例子 例6,将数独求解结果写入excel中,页不变,行不变,列向右移6格的区域中 zxc1='o'; zxc2=num2str(start); zxc3=':'; zxc4='w'; zxc5=num2str(start+8); zxc=[zxc1 zxc2 zxc3 zxc4 zxc5]; success = xlswrite('D:\暂存\数独大全\数独题目.xls',A,sheet,zxc); 其中:xlswrite第一个参数为表格名,或者地址 第二个参数“A”,为要写入的数据 第三个参数“sheet”为表格页,与前面读取时同一个值 第四个参数“zxc”为写入区域,获取方法同样是字符串拼接。 数独题求解后结果写入excel中,如下图6 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论