is there instead solution of xlsread()?
Mostrar comentarios más antiguos
its needed to convert .xls files to .mat but speed of reading by xlsread is too low. is there instead solution of xlsread()? (file exchange or other way to convert .xls to .mat)
UPDATED:
Folder=cd(directory);
d = dir('*.xls');
N_File=numel(d);
e = actxserver ('Excel.Application');
h=waitbar(0,'Progress...');
for o = 1:N_File
qs=numel(d)-o;
clc;
fprintf('Please wait %d second ',qs)
fprintf(1,repmat('\n',1,1));
waitbar(o/N_File,h);
% r = xlsread(d(o).name,2);
cd(directory);
ExcelWorkbook = e.workbooks.Open(fullfile(Folder,d(o).name));
Sheet=ExcelWorkbook.Sheets.Item(2);
Range=Sheet.UsedRange;
r=cell2mat(Range.Value);
ExcelWorkbook.Close;
d=sprintf('r%d',o);
assignin('base',d,r);
end
close all;
e.Quit;
e.delete;
3 comentarios
Fangjun Jiang
el 21 de Sept. de 2011
Use the code below, I didn't see where you save the .mat file.
%%
Folder=cd(directory);
d = dir('*.xls');
N_File=numl(d);
e = actxserver ('Excel.Application');
h=waitbar(0,'Progress...');
for o = 1:N_File
waitbar(o/N_File,h);
ExcelWorkbook = e.workbooks.Open(fullfile(Folder,d(o).name));
Sheet=ExcelWorkbook.Sheets.Item(2);
Range=Sheet.UsedRange;
r=cell2mat(Range.Value);
ExcelWorkbook.Close;
end
e.Quit;
e.delete;
mohammad
el 21 de Sept. de 2011
mohammad
el 21 de Sept. de 2011
Respuesta aceptada
Más respuestas (1)
Jan
el 20 de Sept. de 2011
1 voto
Do you speak of binary Excel files or tab separated ASCII files? While the binary files are imported using an Excel-function, reading ASCII-files can be done faster using a C-Mex. To my surprise FSCANF('%f') of MSVC2008 is slower than a hand-coded C-method to import numbers from ASCII files.
But an implementation of all features of READXLS will consume a lot of time. It will not be a benefit to spend a week for programming to accelerate the data import by some hours only. I have only the core function at the momemt to read from other ASCII files.
Do you import the file from a network drive? Then the speed is most likely limited by the network communication and an acceleration of the reading function would not help very much.
5 comentarios
mohammad
el 21 de Sept. de 2011
Jan
el 21 de Sept. de 2011
If the XLS file has ASCII format, you can read it when you open it in an editor. Then there are faster reading methods.
If the XLS file is binary, the reading is done through a COM method in Excel. If you read the source ("edit readxls"), you find the same method as posted by Fangjun. Therefore I assume that this cannot be accelerated.
On the otherhand: 2 columns and 10'000 lines? This is not a larghe file. I'm surprised that the reading is slow. Is the file stored on the local harddrive or in a network?
mohammad
el 21 de Sept. de 2011
Jan
el 21 de Sept. de 2011
Please use an external editor, e.g. WordPad. If it shows rubbish, the file is in binary format.
mohammad
el 21 de Sept. de 2011
Categorías
Más información sobre Spreadsheets en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!