精华内容
下载资源
问答
  • matlab批量处理excel(CSV)文件数据

    万次阅读 多人点赞 2019-01-29 21:51:25
    1-29,参加完2019年美国大学生数学建模竞赛,小伙伴都回家了,就我一个人在寝室,太无聊了,就把在比赛中遇到的excel批处理,写一下思路(ps:其实我在比赛中利用的是SQLServer数据库和matlab相结合的数据处理方法,...

    今天是2019-1-29,参加完2019年美国大学生数学建模竞赛,小伙伴都回家了,就我一个人在寝室,太无聊了,就把在比赛中遇到的excel批处理,写一下思路(ps:其实我在比赛中 利用的是SQLServer数据库和matlab相结合的数据处理方法,但是一般情况下遇到的都是matlab对excel数据批处理,所以降低要求写了matlab对excel数据批处理,此思路都是小编凭感觉自己摸索出来的,如有错误欢迎指出)。

              今天介绍怎么批量读取excel文件的数据,首选我把excel文件名称分为以下几种情况(全凭个人经验,比如读取图片文件,txt文件思路大同小异,希望我的思路起到抛砖引玉的效果)

    1. 有规律的数值型名字

    
    %date:2019-01-29-夜晚
    %author:猪猪侠
    %邮箱:2377389590@qq.com
    clear %清除变量
    clc%清屏
    filename=dir('*.xlsx');%获取全部的.xlsx文件
    n=length(filename);%文件数目
    for i=2010:2010+n-1%也就是2010:2014
     %思路:声明三维数组储存数据
     %[int2str(i),'.xlsx']是为了遍历excel文件
    [Num(:,:,i-2010+1),TxT(:,:,i-2010+1),Raw(:,:,i-2010+1)]=xlsread([int2str(i),'.xlsx'])
    end

    运行结果:

     

    2. 有规律的数值型+相同文本的名字

    %date:2019-01-29-夜晚
    %author:猪猪侠
    %邮箱:2377389590@qq.com
     
    clear %清除变量
    clc%清屏
    filename=dir('*.xlsx');%获取全部的.xlsx文件
    n=length(filename);%文件数目
     
    for i=2015:2015+n-1%也就是2015:2019
       %思路:声明三维数组储存数据
       %['我是',int2str(i),'.xlsx']拼凑excel名称的字符串是为了遍历excel文件
       [Num(:,:,i-2015+1),TxT(:,:,i-2015+1),Raw(:,:,i-2015+1)]=xlsread(['我是',int2str(i),'.xlsx'])
    end
    

    运行结果

    3. 没有规律的文本的名字

    dir函数可以有调用方式为:

    dir('.') 列出当前目录下所有子文件夹和文件

    dir('D:\Matlab') 列出指定目录下所有子文件夹和文件

    dir('*.xlsx') 列出当前目录下符合正则表达式的文件夹和文件

    得到的为结构体数组每个元素都是如下形式的结构体:

            name    -- filename

            date    -- modification date

            bytes   -- number of bytes allocated to the file

            isdir   -- 1 if name is a directory and 0 if not

            datenum -- modification date as a MATLAB serial date number

    %date:2019-01-29-夜晚
    %author:猪猪侠
    %邮箱:2377389590@qq.com
    clear %清除变量
    clc%清屏
    filename=dir('*.xlsx');%获取全部的.xlsx文件
    n=length(filename);%文件数目
    for i=1:n
       name=filename(i).name;
       [Num(:,:,i),Txt(:,:,i),dict(:,:,i)]=xlsread(['',name,''])%批量读取数据
    end
    

    源码:

    链接:https://pan.baidu.com/s/1iat-mzAAEmCdK4uPR0GjXQ 
    提取码:yr2c 

    记得点赞和关注是对我最大的鼓励 

    实战案例1

    2019-5-20今天没事突然想继续更新这篇博客

    我首先介绍我在数据处理遇到的问题

    1.我这里有93个.csv文件,要按照需求批量处理csv文件数据,然后批量输出excel文件,且文件名不变。

    2.每个csv文件如下图所示,第一列的数据和第二列的“ ;”前的数据组成数据,第二列“ ;”后面数据和第三列数据按照要求组成数据

    比如:6025和57组成6025.57,

              13和290组成13+290/1000=13.29

              剩下数据以此规律类推;

    3.每一个数据表会有*******作为分割线,分割线前面的数据为需要按照以上方法处理的数据,分割线位置是随机变化的

    难点1.字符串拼接问题(主要涉及num2str,cell2mat,chr,str2double ,find ,isnan等函数)

              2.数据文件的批量读入和输出

              3. 异常处理try......catch

     

    代码如下: 

    
    %author:猪猪侠 
    %E-mail:2377389590@qq.com
    clear %清除变量
    clc%清屏
    s=what;
    p=s.path; %当前目录
    filename=dir([p,'\data\','*.csv']);%获取data文件夹下面全部的.csv文件
    n=length(filename);%文件数目
    for i=1:n
       name=filename(i).name;%文件 名称遍历循环
       [Num,Txt,Raw]=xlsread([p,'\data\',name]);%读取数据
       index=find(isnan(Num(:,1)));
       %% ---------对特殊数据表进行处理-----------------------------------------------------------------------------
       try%异常出错处理
            chr=cell2mat(Raw(1:index(1,1)-1,2));
       catch 
            data1=ones(1,index(1,1)-1);%声明空间
            data2=ones(1,index(1,1)-1);%声明空间
            for j=1:index(1,1)-1
                data1(j)=str2double([num2str(cell2mat(Raw(j,1))),'.',chr(j,1:2)]); %对第一列数据和第二列数据进行字符串拼接
                data2(j)=str2double(chr(j,8:9))+str2double(num2str(cell2mat(Raw((j),3))/1000));%对第2列数据和第3列数据进行字符串拼接
            end
            data=[data1',data2'];%拼接后的数据
            xlswrite([p,'\result\',strtok(name,'.'),'.xlsx'],data)%输出特殊数据表
       end
       %% ---------对符合规范的数据表进行处理-------------------------------------------------------------------------
            data1=ones(1,index(1,1)-1);
            data2=ones(1,index(1,1)-1);
            for j=1:index(1,1)-1
                data1(j)=str2double([num2str(cell2mat(Raw(j,1))),'.',chr(j,1:2)]); 
                data2(j)=str2double(chr(j,8:9))+str2double(num2str(cell2mat(Raw((j),3))/1000));
            end
            data=[data1',data2'];
            xlswrite([p,'\result\',strtok(name,'.'),'.xlsx'],data)
    end
    

    数据我已经上传群里欢迎加群获取 

     

    实战案例2,

    前几天在家陪老舅钓鱼,没掉几条,备受打击,所以今天不去了,2019-8-16今天没事干所以继续更新这篇博客,思路如下。

         我这里有三个Excel数据文件,文件名称为无序没有规律的

           要获取三个Excel文件Data表单的全部数据,拼接在一起,然后共用一个表头,经过分析三个Data数据的列数是一样的,不一样的是行数,这样难点就是怎么动态的获取行数,然后再拼接在一起。

    代码如下:

    %author:zhuweijie
    %email:2377389590@qq.com
    %data:2019-08-15
    clc,clear;
    s=what;
    p=s.path;%路径
    filename=dir([p,'\data\','*.xlsx']);%总文件名
    n=length(filename);%文件个数
    for i=1:n
        name=filename(i).name;%单个文件名
        [Num,TxT,Raw]=xlsread([p,'\data\',name],'data');%读入数据
        [row(i),col(i)]=size(Raw);%动态获取数据维度大小
        Row=row-2;%去除表头
        data(1,:)=Raw(2,:);%设置表头
        if 1==i
           data(2:sum(Row(i))+1,:)=Raw(3:end,:);%如果第一次(i=1),则从第二行开始到第一个数据维度+1
        else
           data(sum(Row(1:i-1))+2:sum(Row(1:i))+1,:)=Raw(3:end,:);%如果i>1,从第i-1次数据的下一行(也就是+1)开始到i+1行
        end
        %ps:i=1的if语句可以直接去掉也可以,为了读者方便理解,所以没有删
    end
    xlswrite('result.xlsx',data);%输出
    

    代码已经上传群文件

     

    实战案例3,

    今天是2019-12-28,无聊帮研究生学姐写写代码……废话少说,要求如下

    要求:

    每个excel里面都是要2428A这一列,我看了几个都是ATR 这一列。

    92个excel弄成92列,放在一个excel里面

    感谢猪猪侠,哈哈哈

    代码如下:

    %author:猪猪侠
    %email:2377389590@qq.com
    clc;clear;
    s=what;
    p=s.path;
    file=dir([p,'\data\','*.csv']);%拼接路径,读入all文件名
    % delete([p,'\result\','data.xlsx'])
    filenum=length(file);%文件数目
    data=cell(361,92);
    for i=1:filenum
        name=file(i).name;%文件 名称遍历循环
        [Num,Txt,Raw]=xlsread([p,'\data\',name],strrep(name,'.csv',''));%读取数据
        data(:,i)=Raw(:,1214);
    end
    xlswrite([p,'\result\','data.xlsx'],data)%输出数据表

    完整版数据可以百度云下载

    链接:https://pan.baidu.com/s/1shhVYq9DUre3Nm7rG3ZXrw 
    提取码:kxy9

     

    实战 案例4

    要求就是根据左边数据处理成右边数据

     

    代码如下:

     
    %author:猪猪侠 
    %E-mail:2377389590@qq.com
    clear %清除变量
    clc%清屏
    filename=dir([pwd,'\data\','*.csv']);%获取data文件夹下面全部的.csv文件
    n=length(filename);%文件数目
    for i=1:n
       name=filename(i).name;%文件 名称遍历循环
       [Num,Txt,Raw]=xlsread([pwd,'\data\',name]);%读取数据
       [row,col]=size(Raw);
       for j=1:row%每一个表单中行数
          index=cell2mat(strfind(Raw(j,1),' '));%strfind(S1,S2)在S1查找S2
              char_Raw=char(Raw(j,:));
              data(j,:)=[   cellstr(char_Raw( 1:(index(1)-1) )),   cellstr(char_Raw( (index(1)+1):index(2))),...
                  cellstr(char_Raw( (index(2)+1):index(3))),cellstr(char_Raw( (index(3)+1):index(4))),...
                  cellstr(char_Raw( (index(4)+1):length(char_Raw)))]
          clear index
       end
       xlswrite([pwd,'\result\',strtok(name,'.'),'.xlsx'],data)
    end

    源码 数据已经上传 群文件,自己获取

     

     

     

    matlab对excel数据批处理程序改进

    2019-8-7今天是七夕节也是小编的生日,大清早小编在朋友圈吃饱了狗粮,总感觉要写点什么,抽空写写博客散散心。没啥心情学习,高兴的是我收到了QQ邮箱的祝福

    坚持人丑多读书的宗旨继续写自己的代码,改进excel批量读入的方法,废话少说思路和代码如下

    1.无规律的excel文件名批处理:

    思路:dir(‘*.格式’)一股脑读入所有相同的格式,然后对filename的结构体进行操作(具体过程往上翻,excel无规律的处理有dir函数属性的详细介绍)

    无论文件名咋样的,爱咋样咋样,对于所有excel进行读入,具有普适性的文件,文件如下

    代码如下 

    %author:zhuweijie
    %email:2377389590@qq.com
    %date:2019-8-7-早
    %对于的excel:无论文件名咋样的,爱咋样咋样,对于所有excel进行读入,具有普适性
    clc,clear;
    s=what;
    p=s.path;%当前文件夹路径
    filename=dir([p,'\','*.xlsx']);%拼接路径,读入all文件名
    mydata=cell(1,length(filename));%初始文件元胞数组
    for i=1:length(filename)
         mydata{i}=xlsread(filename(i).name);%导入数据
    end

    运行效果:成功读入文件和数据 

     

    2.有规律的excel文件名批处理: 

     思路:1、构造文件名

                2、路径和文件名字符串拼接

    
    %author:zhuweijie
    %email:2377389590@qq.com
    %date:2019-8-7-早
    %对于的excel:文件名+序号
    clc,clear
    s=what;
    p=s.path;%当前文件夹路径
    filename=dir([p,'\','*.xlsx']);%拼接路径,读入all文件名
    filenum=length(filename);%文件数目
    mydata=cell(1,filenum);%初始文件元胞数组
    for k=1:filenum
        filename=sprintf('data%02d.xlsx',k);
        %构造文件名,注:文件名的读入也可以利用字符串拼接,循环读入
        %对于data1.xlsx……data10.xlsx文件构造文件名为:sprintf('data%d.xlsx',k);
        mydata{k}=xlsread(filename);%导入数据
    end
    

     运行效果:可以循环读入相应的文件名

    读入五个excel文件的数据

    详细的文件数据和代码已经上传群里 

     

     

    有偿帮忙处理批量处理Excel、Txt、CSV数据 ,需要的朋友可以加我QQ:2377389590,非诚勿扰。
     

     

     

    群资料 

    展开全文
  • @关于matlab批量处理excel (csv)文件 要求: 获取文件夹中所有文件的第二列,并求得积分,与文件名的尾号绘制画图; 代码如下: global filename; [filename ,framesPath] = uigetfile({'*.csv'},'选择文件地址'...

    @关于matlab批量处理excel (csv)文件

    要求:
    获取文件夹中所有文件的第二列,并求得积分,与文件名的尾号绘制画图;

    在这里插入图片描述

    在这里插入图片描述
    代码如下:

    global filename;
    [filename ,framesPath] = uigetfile({'*.csv'},'选择文件地址');
    filename= [filename ,framesPath];
    path=framesPath;
    cd(path);
    filesname = dir(strcat(path,'*.csv')); %找到当前路径文件夹下的以.csv为后缀的文件名,strcat是横向连接字符的函数
    Length = length(filesname );
    B=[];
    BB=zeros();
    for i  =3:4:255
     filename=['scope_w-',num2str(i),'.csv'];
    A=csvread(filename,2,1);
    B=[B,A];
    end
    for j=1:Length
     BB(j,:)=abs(trapz(B(:,j)))/6;
    end
    x=3:4:255
    y=BB(:,1);
    plot(x,y);
    xlabel('灰阶');
    ylabel('积分值');
    title('xx曲线','FontSize',16);
    
    

    程序结果
    在这里插入图片描述

    刚接触MATLAB,自己摸索着写,有问题,啰嗦的地方,还请大家指教~

    我是狗子,祝大家幸福~

    bye~

    展开全文
  • %% 批量处理excel文件并画图保存%% 清除变量信息clc ;clear ;%% 转入数据文件目类cd('F:\实验调研\测试数据\Jitter') %该文件夹是你存放多个excel文件的文件夹folder = dir('*.csv'); %读取文件夹下的excel文件,...

    %% 批量处理excel文件并画图保存

    %% 清除变量信息

    clc ;

    clear ;

    %% 转入数据文件目类

    cd('F:\实验调研\测试数据\Jitter')     %该文件夹是你存放多个excel文件的文件夹

    folder = dir('*.csv');     %读取文件夹下的excel文件,返回一个结构体,结构体里面保存的是每个excel文件的信息

    n = length( folder );     %文件夹下一共有几个excel文件,以便下面的循环使用

    %% 开始对文件夹下的excel文件进行批量处理

    for k = 1 : n

    file_name = folder(k).name ;     %提取excel文件的名字

    file_name = char( file_name ) ;

    [Data, text, alldata] = xlsread(file_name) ;     %读取excel文件的数据,这里我只使用到文件中的Data,

    %所以可以改为:

    [Data] = xlsread(file_name) ;

    %% IV Format Conversion,把数据转为数值,保存

    V = alldata( : , 1 ) ;

    I = alldata( : , 3 ) ;     %这两行的内容我没有使用,提供给需要的小伙伴

    V = cell2mat( V ) ;

    I = cell2mat( I ) ;

    %% 开始画图

    plot( V, I , 'b*-' , 'Linewidth' , 3 ) ;     %这部分可以改成你需要对数据进行的画图处理

    grid on

    %%转入图片保存路径

    cd('F:\实验调研\测试数据\Jitter_图片')    %转到保存图片的路径

    %%原数据文件名字问XXX.xlsx,因此需要去除.xlsx(即文件名的后缀),剩余XXX为图片名字

    Position = find( file_name == '.' ) ;

    Picturename = file_name( 1 : Position-1 ) ;

    saveas( gcf, Picturename , 'bmp' )      %保存图片为bmp格式,这里你也可以改成jpg格式

    clf

    %% 处理下一个数据

    cd('F:\实验调研\测试数据\Jitter')

    end

    %% 返回m文件路径

    cd('F:\实验调研\测试数据')

    展开全文
  • matlab处理excel数据时,需要用xlsread函数读入数据,文件夹中有很多xlsx表格文件,想批量处理,但发现处理完第一个后matlab报错显示: 网上查找资料后问题解决,解决方案如下: “ 问题原因: 由于你的系统中装...

    用matlab处理excel数据时,需要用xlsread函数读入数据,文件夹中有很多xlsx表格文件,想批量处理,但发现处理完第一个后matlab报错显示:
    在这里插入图片描述
    网上查找资料后问题解决,解决方案如下:

    “ 问题原因: 由于你的系统中装了一个福昕阅读器(或其他pdf阅读器),该程序占用了excel的com端口,所以当Matlab再去调用这个端口时就会出现异常。
    解决方法:打开任意一个Excel文件,点击文件——选项——加载项——点击下方的管理旁边的下拉菜单,选择COM加载项——点击转到——把福昕阅读器的前面的勾去掉,然后确定。你重新回到MATLAB读取Excel文件试试,应该就可以了。如果还不行,那我就不清楚了。”
    ---------------------

    原文链接:
    http://bbs.pinggu.org/thread-4455475-1-1.html

    展开全文
  • matlab批量处理excel数据,绘图并保存

    千次阅读 2019-10-02 08:58:18
    近期做实验需要处理大量的.dat格式数据,文件内容格式相同,生成折线图并保存图片。 思路: 1. 新建文件夹dat_in,存放待处理数据文件 2. 循环读取文件名,放入元胞数组 3. 按文件名循环处理数据,每个文件...
  • 运用MATLAB和PYTHON批量处理EXCEL文件格式MTALAB批量将CSV文件转为EXCELPython修改excel内字体格式 MTALAB批量将CSV文件转为EXCEL matlab直接转换csv文件会导致日期格式的数据显示为数值形式,即2019/10/6 10:07:49...
  • 自己写,最初用于处理WSN采集数据的,大家可以改写为自己所需的东西,希望对大家有用
  • 此代码为matlab处理多批次excel的范例,可用于多个相同数据格式excel批量处理,并生成可用于论文格式的matlab曲线图
  • 下图为处理前的文件的一部分 下面是实现这些功能的Matlab代码。我用的Matlab版本是2020版的。有些代码需要根据自己实际的需要进行更改,比如如果你读取的文件格式是.xls就可以把第五行的.csv改成.xls。或者你希望...
  • 利用常用软件批量完成科研数据处理tags: - MATLAB - 科研软件相信平时大家都有这种时候,测了一大堆数据,也知道该怎么去处理,但是样品很多,数据量很大,然后对于每个样品去处理的时候都得用软件进行重复的处理,...
  • 3.循环读取,load用于打开txt,处理数据得到b,c,d 4.读取test.xlsx的行数,列数,判断其是否为空 5.逐行写入,其中tmpRaw为当前行数 6.xlswrite中['A',mRowRange]的A为指定列 function main record=dir('data\...
  • 经常要把下载下来的csv格式的文件处理成xlsx格式,才能进行各种函数处理,如果有成千上百个csv文件那就会很费时间,以下宏代码保哥在office2016上亲测可用,现分享给大家,要注意源文件夹与目标文件夹的绝对路径要...
  • 我之前写过一篇批量读取Excel数据的,代码比较原始和啰嗦:张敬信:【Matlab/R语言】批量读入Excel文件​zhuanlan.zhihu.com近年来,R语言技术突飞猛进,再来一篇更简洁高级的。批量读取并合并,道理很简单,总共分...
  • Matlab 作为一个数据处理软件,内置了很多很强大的工具箱...由于matlab是可以读取及编辑电脑中的Excel文件的,这里分享一段批量处理Excel文件,汇总到一个文件中去的小程序:clcclearticpath = 'C:\Users\liusq\Des...
  • name = readcell('E:\电脑文件\2编程matlab\数据处理程序\批量处理文件夹\name.xlsx','sheet','sheet1'); for i=1:length(name) mkdir('E:\电脑文件\2编程matlab\数据处理程序\批量处理文件夹\新建文件夹',name{i})...
  • matlab批量导出 矩阵到

    2020-04-02 09:31:06
    对多个图片进行FFT处理后生成多个矩阵,想要把这些矩阵批量提取出来到excel作为例子我只生成了3个,应该是生成1000个矩阵。我最下边只是提取了一个,希望吧所有的A1到A1000都取出来,不知如何for循环一下。 ``` ...
  • 有时候我们需要对某个文件夹或者多个文件夹中的Excel文件进行读取,然后处理。那么怎么实现呢? 以一个文件夹下的Excel文件进行读取为例。 文件地址:E:\Study of Lab\Coding\Experience DatePhoto\Excel 对文件...

空空如也

空空如也

1 2 3
收藏数 51
精华内容 20
关键字:

matlab批量处理excel

matlab 订阅