如何在matlab中将Excel文件序列作为列向量或单元格数组导入?

如何在matlab中将Excel文件序列作为列向量或单元格数组导入?,matlab,Matlab,我想导入一系列excel文件,其中包含大量数据。我遇到的问题是,我希望一次处理每个文件中的数据,并将其输出存储到变量中,但每次尝试处理不同的文件时,变量都会在变量工作区中被覆盖。我是否可以存储这些文件并一次处理每个文件 numFiles = 1; range = 'A2:Q21'; sheet = 1; myData = cell(1,numFiles); % Importing data from Excel for fileNum = 1:numFiles fileName =

我想导入一系列excel文件,其中包含大量数据。我遇到的问题是,我希望一次处理每个文件中的数据,并将其输出存储到变量中,但每次尝试处理不同的文件时,变量都会在变量工作区中被覆盖。我是否可以存储这些文件并一次处理每个文件

numFiles = 1; 
range = 'A2:Q21'; 
sheet = 1; 
myData = cell(1,numFiles); % Importing data from Excel 
for fileNum = 1:numFiles 
  fileName = sprintf('myfile%02d.xlsx',fileNum); 
  myData{fileNum} = importfile3(fileName,sheet,range); 
end 
data = cell2mat(myData); 
实际数据导入由
importfile3
执行,该文件在很大程度上是
xlsread
函数的包装,返回与指定excel数据范围对应的矩阵

function data = importfile3(workbookFile, sheetName, range)
% If no sheet is specified, read first sheet
if nargin == 1 || isempty(sheetName)
    sheetName = 1;
end

% If no range is specified, read all data
if nargin <= 2 || isempty(range)
    range = '';
end

%% Import the data 
[~, ~, raw] = xlsread(workbookFile, sheetName, range);

%% Replace non-numeric cells with 0.0
R = cellfun(@(x) ~isnumeric(x) || isnan(x),raw); % Find non-numeric cells
raw(R) = {0.0}; % Replace non-numeric cells

%% Create output variable 
data = cell2mat(raw);
function data=importfile3(工作簿文件、工作表名称、范围)
%如果未指定图纸,请阅读第一张图纸
如果nargin==1 | |为空(sheetName)
sheetName=1;
结束
%如果未指定范围,则读取所有数据

如果nargin您遇到的问题是由于将单元格中的所有数据连接到一个大的二维矩阵中而导致的。如果要导入两个excel文件,每个文件有20行17列,这将生成一个大小为[20 x 34]的二维矩阵。for
cell2mat
有一个很好的视觉描述

我看到您的
importfile3
函数返回一个矩阵,根据您在最后一行代码中使用的
cell2mat
,您似乎希望最终结果以矩阵的形式出现。所以我认为最简单的方法就是绕过中间的
myData
单元数组

在下面的示例代码中,生成的
数据
是一个三维矩阵。第一个维度表示行编号,第二个维度表示列编号,第三个维度表示文件编号。单元格数组对于“锯齿”数据非常有用,但根据您提供的代码,您导入的每个excel数据集的行数和列数都相同

numFiles = 2; 
range = 'A2:Q21'; 
sheet = 1; 

% Number of rows and cols known before data import
numRows = 20;
numCols = 17;

data = zeros(numRows,numCols,numFiles);
for fileNum = 1:numFiles 
   fileName = sprintf('myfile%02d.xlsx',fileNum); 
   data(:,:,fileNum) = importfile3(fileName,sheet,range);
end 
现在访问这些数据非常简单

data(:,:,1)
返回从第一个excel文件导入的数据。
data(:,:,2)
返回从第二个excel文件导入的数据。
等等。

你能发布一些代码片段吗?numFiles=1;范围='A2:Q21';表=1;myData=单元格(1,numFiles);%从Excel导入fileNum=1的数据:numFiles fileName=sprintf('myfile%02d.xlsx',fileNum);myData{fileNum}=importfile3(文件名、工作表、范围);结束数据=cell2mat(myData);这是我用来导入excel文件的代码。然后还有一个用于处理文件中数据的代码。看起来您的代码的核心在
importfile3
函数中。你能包括这个代码吗?你有没有考虑改用它?当您说您的数据被覆盖时,您的意思是在for循环的每次迭代中,
myData
没有按您希望的方式更新?myData正在更新。但是,当我使用cell2mat将单元格转换为矩阵时,我无法访问单元格数组中的不同单元格。我可以从同一文件的多个excel工作表中导入数据吗?而且在上面的示例中,我有一个很大的excel文件。如果我不知道怎么办ncols和nrows预下标赋值维度不匹配。main6(第22行)数据中的错误(:,:,fileNum)=importfile3(文件名,工作表,范围);根据示例代码中提供的
importfile3
的用法,您正在指定范围(即本例中的“A2:Q21”),因此您将知道
importfile3
应返回的行和列的确切数量。如果文件的行/列数超过指定范围,则不会返回这些行/列。如果数据较少,则数据将被零填充。我猜您收到的错误是因为您指定的
范围
numRows
numCols
的值不匹配。例如,
range='A2:Q21'
有20行和17列。