How to read multiple excel tabs each as a separate matrix

4 vues (au cours des 30 derniers jours)
abdulhallis aziz
abdulhallis aziz le 5 Déc 2012
Commenté : hime skuld le 20 Déc 2015
Dear All,
I am given the task to find the maximum value within each tab of a number of excel files. I used xlsread only to find out that it took a day (25 hours) to read an excel file with 6600 tabs. These are my codes. Is there other ways to get this done faster?
myFolder = 'D:\study';
filePattern = fullfile(myFolder, '*.xlsx'); excelFiles = dir(filePattern); for k = 1:length(excelFiles) baseFileName = excelFiles(k).name; fullFileName = fullfile(myFolder, baseFileName); fprintf(1, 'Now reading %s\n', fullFileName);
[type,sheetname] = xlsfinfo(fullFileName);
m=size(sheetname,2);
for i=5:m
Sheet = char(sheetname(1,i)) ;
alldata = xlsread(fullFileName, Sheet);
[x,y]=max(alldata(:,2));
output(i,:)=alldata(y,:);
end
Warm regards, Hallis

Réponse acceptée

abdulhallis aziz
abdulhallis aziz le 11 Déc 2012
Modifié(e) : abdulhallis aziz le 11 Déc 2012
Omitted reading the header row in excel files by redefining data range. Got the program to read each sheet in an excel file and store the row with max value for column 2. Thanks to Fangjun and all. these are my codes:
[File,Folder] = uigetfile('.xlsx', 'Select Excel XLSx File to be Process');
excel_data_range = 'A2:B' ;% self define, data is column A and B, 1st row header omitted, exl = actxserver ('Excel.Application'); % open com server
exlFile = exl.Workbooks.Open(fullfile(Folder,File)); [type,sheetname] = xlsfinfo(fullfile(Folder,File)); sheet_max = numel(sheetname); %Determine no. of sheets in current .xlsx file
for i=1:sheet_max
exlSheet = exlFile.Sheets.Item(cell2mat(sheetname(1,i)));
robj = exlSheet.Columns.End(4); % Find the end of the column
numrows = robj.row; % And determine what row it is
dat_range2 = [excel_data_range num2str(numrows)]; % Read to the last row
rngObj = exlSheet.Range(dat_range2);
exlData2 = rngObj.Value;
arr = cell2mat(exlData2);
%finding max in array, y is value, x is row of occurance
[x,y]=max(arr(:,2));
output(i,:)=arr(y,:);
end
end
toc
exl.Quit; exl.delete;

Plus de réponses (1)

Fangjun Jiang
Fangjun Jiang le 5 Déc 2012
xlsread() has a lot if overhead. Follow this link to use Excel COM method.
  3 commentaires
Fangjun Jiang
Fangjun Jiang le 7 Déc 2012
It is an error about using cell2mat(). It requires all the data to be the same data type. You can't have a mix of e.g. numerical and string data.
hime skuld
hime skuld le 20 Déc 2015
Why I cannot run this code properly. It looks like it cannot read my sheet in excel. after run, I found my N_file = 0 . I`m using matlab R2015b and excel 2013. somebody can tell me whats the problem.

Connectez-vous pour commenter.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by