zoukankan      html  css  js  c++  java
  • MATLAB 读取和写出Excel文件的方法-单个以及自动循环读写多个情况

     一.读取数据

    1.用xlsread函数读取一个Excel文件

    (1)num=xlsread(filename)
    filename是单引号括起来的带路径的文件名,函数直接读取filename所指文件的sheet1中的数据区域存储到双精度矩阵num中;其中,数据区域的选取规则是:对表格前几个含有非数值的行(列)直接忽略,不算入数据区域;另外如果在数据区域中含有非数值的单元,将其处理为nan。


    (2)num = xlsread(filename, -1)
    输入后matlab将会打开相应的exel文件,用鼠标选择需要导入的数据区域,可以切换到想要的sheet。
    (3)num = xlsread(filename, sheet)
    其中sheet用来指定读入excel文件的第几个sheet,此时的sheet取值大于1的整数。


    (4)num = xlsread(filename,sheet, 'range')
    其中range指定一个矩形的区域,用单引号括起来;例如:'D2:H4'代表以D2和H4为对角定点的矩形域;
    注意当excel中有合并单元格时,任何一个合并前的单元格的名字(比如D1)都会指代整个合并后的单元格,而将整个单元格读入,所以为了避免麻烦,尽量避免在需要读入的表格中合并单元格。

    例如:将读取D盘下的一个文件路径为:D:/test/daxia.xls
    num = xlsread('d:/test/daxia.xls',2,'D2:H4')读取sheet2的D2:H4区域数据
    如果要进行交互式的选择用:num= xlsread('d:/test/daxia.xls',-1)

    2.批量的文件要读取


    首先将多个文件进行批量重命名例如daxia1.xls,daxia2.xls,daxia3.xls,...
    然后用循环的方式实现:
    for i=1:100
        filename=['d:/test/daxia',num2str(i),'.xls'];
        num=xlsread(filename)
    end

    [NUM,TXT,RAW]=xlsread('filename')  读出excel中所有的数据包括文字: NUM返回的是excel中的数据,TXT输出的是文本内容,RAW输出的是未处理数据,这里因为文本占用的矩阵一共是8行6列,所以就输出了如上内容。一般情况下,我们读取的都是excel中的数据,所以可以直接用[NUM]=xlsread('example'),只输出数据矩阵便可。

    Num中属于精度double类型,只能读取文档中的数字,如果有一列不是数字,那么就会返回NaN,;txt属于cell类型可以读取文本,raw也为cell类型既可以读取数字可以读取文本并且每一列的值不需要是同一个类型的,但是在数组为空的时候,txt返回空值,raw返NaN。

    例1:data.xlsx中的数据为:

     1.  a= xlsread('data.xlsx')  ,则返回值为:

     2.   a = xlsread('data.xlsx',sheet,'B2:C6') ,则返回值为:

     3.    [num,txt,raw,custom] = xlsread('data.xlsx')  ,则返回值为:

     

     

     例2:给出pailie3.xlsx部分数据

      

     1.fid = xlsread('pailie3.xlsx');

     第二列为字符串,读出来显示NaN (Not a Number,不是数字),且fid类型为double

    2.[num,txt,raw] = xlsread('pailie3.xlsx');

     num 为double 类型

    txt为cell类型,只有第二列和第11列被读出来

    raw为cell类型,能同时读取字符或者数字。

    总结:只需要操作数据时可以使用1中读取方法或者使用num;当需要操作字符时,可以使用txt;raw是通用的。

    转自https://blog.csdn.net/qq_41325698/article/details/95251829

    参考https://blog.csdn.net/qq_43392493/article/details/100528582

              https://blog.csdn.net/roytao2/article/details/54098053?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.channel_param

    详细参考matlab Help 文档:

    注意https://www.mathworks.com/help/matlab/ref/xlsread.html

    xlsread只读取7位ASCII字符。xlsread不支持非连续范围。

    二. 写入数据

    1.写入单个文件

    (1)xlswrite(filename,A)   将矩阵A写入Microsoft®Excel®电子表格工作簿中的第一个工作表,文件名从单元格A1开始。

    (2)xlswrite(filename,A,sheet)   写入指定的工作表。sheet为正整数,

    (3)xlswrite(filename,A,xlRange)   写入到工作簿的第一个工作表中由xlRange指定的矩形区域。使用Excel范围语法,如“A1:C3”。

    (4)xlswrite(filename,A,sheet,xlRange)   写入指定的工作表和范围。

    (5)status = xlswrite(___)          使用前面语法中的任何输入参数返回写操作的状态。 当操作成功时,状态为1。否则,状态为0。

    (6)[status,message] = xlswrite(___)    在结构消息中返回由写操作生成的任何警告或错误消息。

    filename是需要保存的文件路径,只写文件名,保存为当前路径,在matlab界面左侧的文件树下即为当前路径;如果filename中有路径和文件名就会保存至指定路径

    A是要保存的变量,如x,x'为转置,可以竖直输出 ;  sheet是excel的页数,输入整数便可以指定对应sheet ; xlRange是保存的单元格位置,‘A3'为从A3单元格开始输入‘A3:D8'为保存单元格区域

    status为1读取成功,0为读取失败; message为输出的报错信息

    2. xlswrite函数输出多个文件时,如何自动更改文件名?

    核心思想:利用num2str将数值转换成字符串写入xlswrite函数里面。

    用for循环可以实现
    假设N是误差矩阵的个数
    for i=1:N
         xlswrite(['误差' num2str(i) '.xlsx'],wucha,'sheet1','A1'); 
    end

    从sheet1中的A1开始写,wucha--指自己要写入的数据,方括号里面的指的是每一自动更改名称的表达式

    参考:https://zhidao.baidu.com/question/470310196.html

             https://www.mathworks.com/help/matlab/ref/xlswrite.html

    本文版权归作者和博客园所有,欢迎转载,但请在文章也页面明显位置给出原文链接。如对文章有任何意见或者建议,欢迎评论。个人才疏学浅,文章如有错误,欢迎指正,也欢迎大家分享交流自己更好的方法! 此外有时由于太懒不是自己写上去的,引用了一些大佬的文章,如有忘记备注原文内容链接,实非故意。
  • 相关阅读:
    微信 token ticket jsapi_ticket access_token 获取 getAccessToken get_jsapi_ticket方法
    PHP 日志 记录 函数 支持 数组 对象 新浪 sae 环境 去掉 空格 换行 格式化 输出 数组转字符串
    原生 原始 PHP连接MySQL 代码 参考mysqli pdo
    PHP 数字金额转换成中文大写金额的函数 数字转中文
    使用PHPMailer发送带附件并支持HTML内容的邮件
    设置输出编码格式 header 重定向 执行时间 set_time_limit 错误 报告 级别 error_reporting
    html5 bootstrap pannel table 协议 公告 声明 文书 模板
    指向指针的指针
    二级指针
    c语言:当指针成为参数后
  • 原文地址:https://www.cnblogs.com/csymemory/p/13760627.html
Copyright © 2011-2022 走看看