在MATLAB中读取Excel文件并创建数组
我有一个将坐标导出到xls文件的软件,现在我想在MATLAB中创建一个函数,该函数使用该xls文件,但不希望更改原始软件,因此xls文件必须保持相同的格式 我目前正在使用代码在MATLAB中读取Excel文件并创建数组,matlab,Matlab,我有一个将坐标导出到xls文件的软件,现在我想在MATLAB中创建一个函数,该函数使用该xls文件,但不希望更改原始软件,因此xls文件必须保持相同的格式 我目前正在使用代码 FILE = 'KEN FILE2.xls'; [NUM,TXT,RAW]=xlsread(FILE); xArray = cell2mat(RAW(:,1)) yArray = cell2mat(RAW(:,2)) 这还不够好,因为我的excel文件如下所示: 1 2 2 2.1 3 2.
FILE = 'KEN FILE2.xls';
[NUM,TXT,RAW]=xlsread(FILE);
xArray = cell2mat(RAW(:,1))
yArray = cell2mat(RAW(:,2))
这还不够好,因为我的excel文件如下所示:
1 2
2 2.1
3 2.2
4 2.3
Value of ken
27
由于A列中的文本是代码所覆盖的,我显然可以手动编辑excel文件,这样我上面的代码就可以工作了,但我更希望有一个代码来处理这个问题
有什么想法吗?您可能会找到使用ismember切断单元阵列的位置: 代码-
假设读作NaN和27的最后两行是注释,并由两个被称为NaN的空行分隔:
在示例输入中,A列末尾有27,B列中没有任何内容。因此,是否希望将27添加到xArray?如果是这样,那么yArray中相应的元素呢?no 27不需要在数组中。我尝试了最后一个代码选项,它使我的x和y数组为空。我想在excel工作表的第三列或更高列中有一些非空单元格。所以,使用RAW=RAW:,1:2;就在xlsread行之后。是的,但现在涉及27,我希望数组在空格之前的最后一个值上结束。因此,在本例中,它将以4Just edited结束。让我们知道它现在是否适用于您的新需求!
%//example data
a = {'1';'2';'3';'4';'';'value'};
last = find(ismember(a,''),1)-1;
a_new = a(a:last);
%%// Read excel file
[NUM,TXT,RAW]=xlsread(FILE);
%// Use this if you think that there might be non-empty cells on third or later
%// columns, which you do not want to consider.
RAW = RAW(:,1:2);
%%// Main processing starts now
RAW(cellfun(@ischar,RAW)) = {NaN};
out = cell2mat(RAW);
%%// Use this if you are okay with having NaNs to replace non-numeric data
%RAW = RAW(find(any(out,2)),:);
%%// Use this if you want to replace all rows having any non-numeric data in them
RAW = RAW(find(all(~isnan(out),2)),:);
%// Use this if you want to stop data import at the first instance of
%// non-numeric data in any row of any column
RAW = RAW(1:find(any(isnan(out),2),1,'first')-1,:);
%%// Output arrays
xArray = cell2mat(RAW(:,1))
yArray = cell2mat(RAW(:,2))
[NUM,TXT,RAW]=xlsread(FILE);
[m,n]=size(NUM);
% drop off 4 last lines
xArray(:,1)=NUM(1:m-4,1);
yArray(:,1)=NUM(1:m-4,2);
%clean mess
clear NUM TXT RAW m n