24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2738  |  回复: 11

yangyong177

木虫 (小有名气)

[求助] matlab求助:批量导入大量无规律excel文件,并按年月日合并数据已有2人参与

求助:各位大神们,小弟接触matlab不久,菜鸟一名,请各位大神指导帮忙:1)如何批量导入大量命名无规律的excel文件,2)导入excel文件中各数据长度不一,如何按相同的日期合成一个文件。数据很多,无法完整上传。仅上传4个excel例子,请大家帮忙指导。
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : PSA287.xlsx
  • 2018-06-01 16:05:58, 44.52 K
  • 附件 2 : PSA447.xlsx
  • 2018-06-01 16:05:58, 37.58 K
  • 附件 3 : PSA546.xlsx
  • 2018-06-01 16:05:58, 30.37 K
  • 附件 4 : PSA561.xlsx
  • 2018-06-01 16:05:59, 39.24 K

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lds588

铁杆木虫 (著名写手)

愚钝

[url=http://weibo.com/u/2577306830?s=6uyXnP][img]http://service.t.sina.com.cn/widget/qmd/2577306830/fa2fdb00/1.png[/img][/url]
2楼2018-06-03 09:52:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

young_sir

银虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2018-06-03 23:19:18
yangyong177: 金币+888, ★★★很有帮助, 非常感谢,不过还有点小问题请教 2018-06-06 10:40:00
1)如何批量导入大量命名无规律的excel文件

     Matlab可以做到遍历当前文件夹下面的所有文件。举例:我在桌面上建立一个TEMP的文件夹,并把楼主给的4个xlsx都放到其中。然后通过下面的循环读出所有后缀为'xlsx'的文件名。
CODE:
path = 'C:\Users\asus-ps\Desktop\TEMP\'; fileExtension = '*.xlsx'; files = dir(fullfile(path,fileExtension)); len = size(files,1); for ii = 1:len fileName = strcat(path,files(ii,1).name) end

读取数据就更简单了,用xlsread就行。
CODE:
for ii = 1:len fileName = strcat(path,files(ii,1).name); data = xlsread(fileName) end

2)导入excel文件中各数据长度不一,如何按相同的日期合成一个文件。

    第1)步每次读出的data就是数据表的10列数据,根据2--4列的年月日信息进行归类即可。
3楼2018-06-03 22:49:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

FMStation

至尊木虫 (知名作家)

【答案】应助回帖


jjdg: 金币+1, 感谢参与 2018-06-09 01:02:11
https://www.mathworks.com/help/matlab/ref/xlsread.html
CODE:
values = {1, 2, 3 ; 4, 5, 'x' ; 7, 8, 9};
headers = {'First','Second','Third'};
xlswrite('myExample.xlsx',[headers; values]);

filename = 'myExample.xlsx';
A = xlsread(filename)

filename = 'myExample.xlsx';
sheet = 1;
xlRange = 'B2:C3';
subsetA = xlsread(filename,sheet,xlRange)

filename = 'myExample.xlsx';
columnB = xlsread(filename,'B:B')

[num,txt,raw] = xlsread('myExample.xlsx')

https://www.mathworks.com/help/matlab/import_export/exporting-to-excel-spreadsheets.html
CODE:
load patients.mat
T = table(LastName,Age,Weight,Smoker);
T(1:5,:)

filename = 'patientdata.xlsx';
writetable(T,filename,'Sheet',1,'Range','D1')

writetable(T,filename,'Sheet',2,'WriteVariableNames',false)

» 本帖已获得的红花(最新10朵)

4楼2018-06-05 08:06:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yangyong177

木虫 (小有名气)

引用回帖:
3楼: Originally posted by young_sir at 2018-06-03 22:49:29
1)如何批量导入大量命名无规律的excel文件

     Matlab可以做到遍历当前文件夹下面的所有文件。举例:我在桌面上建立一个TEMP的文件夹,并把楼主给的4个xlsx都放到其中。然后通过下面的循环读出所有后缀为'xlsx ...

非常感谢您的回复。前两天有事,忘记感谢您了。
不过还有两个问题请教:1)按照你的代码批量代入后,matlab中只有最后一个excel文件数据,其他三个都没有?
  2)第二步,合成一个文件依然不会处理,请您指教,能否提供简单代码。
5楼2018-06-06 10:42:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yangyong177

木虫 (小有名气)

送红花一朵
引用回帖:
4楼: Originally posted by FMStation at 2018-06-05 08:06:49
https://www.mathworks.com/help/matlab/ref/xlsread.html


values = {1, 2, 3 ; 4, 5, 'x' ; 7, 8, 9};
headers = {'First','Second','Third'};
xlswrite('myExample.xlsx',);

filename = 'myExample.xls ...

非常感谢您提供指导,不过好像没有解决我的问题。不管怎么样,送您红花一朵,感谢回复指导。
6楼2018-06-06 10:45:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

FMStation

至尊木虫 (知名作家)

★ ★
jjdg: 金币+2, 感谢参与 2018-06-09 01:02:25
1. 如何批量导入大量命名无规律的excel文件
CODE:
>> [n, files] = get_folder_content( 'c:/A123/', 'myEx', 0, '');

Folder contain files for further processing:
1 file: myEx01.xlsx
2 file: myEx0A.xlsx
3 file: myExCC1.xlsx
Number of listed files: 3

>> allFiles=strvcat(files.name)

allFiles =
myEx01.xlsx
myEx0A.xlsx
myExCC1.xlsx

>> allFiles(1,:)

ans =
myEx01.xlsx


%%%%%%%%%%%%%%%%%
       get_folder_content
%%%%%%%%%%%%%%%%%
% Function return the folder content filtered
% function [ n, datafiles ] = get_folder_content( directory, filepattern, filterout, fpattern)
%
% input:
% - directory
% - filepattern
% - filterout | 1 or 0
% - fpattern | not include files with this pattern
% fpattern is charracter array created by fpattern =
% char('string1', 'string2', ...,'stringn');
% or in case of one string fpattern = 'string';
%
% output:
% - n | number of files
% - datafiles | structure with datafiles
% datafiles(i).name -- sigle file name
% datafiles(i).fullname -- including full path
function [ n, datafiles ] = get_folder_content( directory, filepattern, filterout, fpattern)
%initialisation of the structure
datafiles(1).name = '';
datafiles(1).fullname = '';
if nargin <3,
filterout = 0;
end
tmpdir = dir([directory filepattern '*']);
nn = length(tmpdir);
%filtering not necessary files
cnt = 0;
display('Folder contain files for further processing:')
if filterout==1
[nstr s] = size(fpattern);
filter_flag = 0;
for i=1:nn
for st=1:nstr
S = regexp(tmpdir(i).name,fpattern(st,:));
if(isempty(S))
filter_flag=0;
else
filter_flag=1;
end
end
if(filter_flag==0)
% filter pattern not maching ... so this is correct file
cnt = cnt+1;
datafiles(cnt).name = tmpdir(i).name;
datafiles(cnt).fullname = [directory tmpdir(i).name];
else
%filter pattern matching
%display(['Filtering out: ' tmpdir(i).name ' file'])
end
end
else
for i=1:nn
datafiles(i).name = tmpdir(i).name;
datafiles(i).fullname = [directory tmpdir(i).name];
end
end
n = length(datafiles);
for i=1:n
display([ num2str(i) ' file: ' datafiles(i).name ])
end
display(['Number of listed files: ' num2str(n)]);
return

» 本帖已获得的红花(最新10朵)

7楼2018-06-06 17:50:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yangyong177

木虫 (小有名气)

送红花一朵
引用回帖:
7楼: Originally posted by FMStation at 2018-06-06 17:50:47
1. 如何批量导入大量命名无规律的excel文件


&gt;&gt;  = get_folder_content( 'c:/A123/', 'myEx', 0, '');

Folder contain files for further processing:
1 file: myEx01.xlsx
2 file: myEx0A. ...

非常感谢您提供指导,能否指导第二步,如何将导入的数据按年月日合成一个文档。
8楼2018-06-07 11:14:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

FMStation

至尊木虫 (知名作家)


jjdg: 金币+1, 感谢参与 2018-06-09 01:02:44
批量导入大量命名无规律的excel文件
按相同的日期sort
合成一个Big excel文件
CODE:
[files,folder] = uigetfile('*.xls','Select Files','MultiSelect','on');

N=[];
for i=1:numel(files)
myName=fullfile(folder,files{i})
A = xlsread(myName);
N = [N;A];
end

N2 = sortrows(N,[2,3,4]);
xlswrite('c:/myExample.xlsx',N2);

» 本帖已获得的红花(最新10朵)

9楼2018-06-07 19:55:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

young_sir

银虫 (正式写手)


jjdg: 金币+1, 感谢参与 2018-06-09 01:02:56
引用回帖:
5楼: Originally posted by yangyong177 at 2018-06-06 10:42:47
非常感谢您的回复。前两天有事,忘记感谢您了。
不过还有两个问题请教:1)按照你的代码批量代入后,matlab中只有最后一个excel文件数据,其他三个都没有?
  2)第二步,合成一个文件依然不会处理,请您指教,能 ...

因为for循环里,每次读取都存到变量data里了,下一次读取时就把上一次覆盖了,我这里只是给了一个示范。

第二个你可以重述一下你的要求吗,或者给个例子

发自小木虫Android客户端

» 本帖已获得的红花(最新10朵)

10楼2018-06-07 23:02:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yangyong177 的主题更新
信息提示
请填处理意见