Matlab ActxServer - PullRequest
       2

Matlab ActxServer

0 голосов
/ 06 декабря 2011

Следующий цикл считывает данные из excel в matlab с использованием actxserver.Цикл не завершится из-за ошибки, которая говорит о том, что данные из Excel слишком велики.Мне трудно в это поверить, поскольку существует 75 листов Excel, каждый из которых содержит приблизительно 14000 строк и 21 столбец, поэтому набор данных не очень массивен.Поэтому я не уверен, является ли этот цикл причиной проблемы или набор данных слишком большой.

Сценарий выглядит следующим образом:

clear all
%obtain the name of each of the folders under investigation
path='F:\University\CEH Lancaster\Project\Practice'; 
folder = path; 
dirListing = dir(folder); 
dirListing=dirListing(3:end);%first 2 are just pointers
for i=1:length(dirListing);
    Folder_Name{i}=dirListing(i,1).name;
    f{i} = fullfile(path, dirListing(i,1).name);%obtain the name of each folder
    files{i}=dir(fullfile(f{i},'*.xls'));%find the .xls files
    for j=1:length(files{1,i});
        File_Name{1,i}{j,1}=files{1,i}(j,1).name;%find the name of each .xls file in each folder
    end
end
%manually obtain the name of the required worksheets
Name_workbook={'Data1', 'Data2', 'Data3', 'Data4'};
%read data in from excel
excel = actxserver('Excel.Application');
excel.Visible=0;
for i=1:length(File_Name);
    a(i)=length(File_Name{1,i});
    for j=1:a(i);
        file{1,i}{j,1}=excel.Workbooks.Open(fullfile(path,Folder_Name{1,i},File_Name{1,i}{j,1}));
        sheet1{1,i}{j,1}=excel.Worksheets.get('Item', Name_workbook(1,i));
        MyRange{1,i}{j,1}=sheet1{1,i}{j,1}.UsedRange; 
        MyData{1,i}{j,1}=MyRange{1,i}{j,1}.Value;        
    end
end

Есть ли у кого-нибудь мнение по поводучто я должен попробовать дальше?

1 Ответ

1 голос
/ 07 декабря 2011

Должны ли вы закрывать рабочие книги после прочтения данных? Если вы открываете файлы и не закрываете их, то в Excel может быть открыто слишком много рабочих книг одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...