MATLAB 读写excel数据

来源:互联网 发布:js数据类型转换 编辑:程序博客网 时间:2024/05/16 08:59

转自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 <wbr>读写excel数据
表1  0520.xls中的内容

    在MATLAB中执行命令:[number,txt,raw]=xlsread('0520')

结果如下:

  MATLAB <wbr>读写excel数据  MATLAB <wbr>读写excel数据
                 图1                                       图2

 

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')

    MATLAB <wbr>读写excel数据
                  图3

 

4、读取区域含有空白或者字符,需要用特定数值替代

    对于所读取的数据有时达不到自己的需求,比如,表格中有空白位置,读出来就是“NaN”,例如本人所要做的数独解题,题目中只有部分位置是非零数字,其余为空白待填,这时xlsread命令会直接将表格中的空白位置用“NaN”替代,如下图4(1):

    A= xlsread('数独题目.xls','a121:i129')

   MATLAB <wbr>读写excel数据
                             图4(1)

    由上面结果可知,“NaN”替代了所有空白位置。但这样有时并不适合进行MATLAB运算,比如填数独就是。这时需要将这些空白位置用特定的值替代,这里我们可以用以下命令将空白位置全部赋成0

    A(isnan(A))=0,

    结果如下图4(2):

    MATLAB <wbr>读写excel数据

                             图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');
    switch lever
        case 1
           sheet='初级题40';
           disp('you choose lever: primary!');
        case 2
           sheet='高级题40';
           disp('you choose lever: senior! ');
        case 3
           sheet='专家题40';
           disp('you choose lever: experts! ');
        case 4
           sheet='骨灰题40';
           disp('you choose lever: hardcore! ');
    end

   

    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题。

   MATLAB <wbr>读写excel数据MATLAB <wbr>读写excel数据
         图5(1)                                   图5(2)

 

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

        MATLAB <wbr>读写excel数据
                               图6


0 0
原创粉丝点击