我想使用[~, ~, temp] = xlsread('1.csv','A:A');
获取1行CSV文件1.csv
的第一列。
1.csv
只包含一行:
5B0E8795E18013D0FBC33558F0512832,3,7,1,实践,榨汁机,榨汁机,TRUE,FALSE,2347.0,0
但是,返回的temp
是< 1048576x1>细胞。 temp
不应该是< 1x1>细胞
参数'A:A'
应仅返回第一列的现有行,如xlsread() documentation中的“读取数据列”示例所示。由于temp
是< 1048576x1>单元格,似乎使用'A:A'
返回整个列,包括不存在的行(1048576是Microsoft Excel 2010中的最大行数)。
使用textscan()
工作正常(= datatemp
在以下代码段中只有1行):
fid = fopen('1.csv','r');
datatemp = textscan(fid, '%s %d %d %d %s %s %s %s %s %d %d', 'delimiter',',', 'CollectOutput',true)
fclose(fid);
但是我不明白为什么xlsread()
无法正常工作。我使用MATLAB R2012a 64位,Microsoft Excel 2010和Windows 7 x64。
答案 0 :(得分:3)
这实际上就是Excel COM界面的工作方式,所以你不能责怪MATLAB:)
这是一个基本上在内部执行xlsread
的示例代码。您可以在VBScript / Powershell中编写代码并获得相同的结果......
%# create Excel COM server
Excel = actxserver('excel.application');
%# open file
Excel.workbooks.Open(which('1.csv'), 0, true);
Excel.Worksheets.Item(1).Activate();
Excel.Visible = true;
%# select first column
Excel.Range('A:A').Select();
val = Excel.Selection.Value();
%# close
Excel.Quit();
Excel.delete();
变量val
返回:
>> whos val
Name Size Bytes Class Attributes
val 1048576x1 71303224 cell
其中除第一个之外的所有单元格都是NaN:
>> val(1:3)
ans =
'5B0E8795E18013D0FBC33558F0512832'
[NaN]
[NaN]
我不明白为什么你不使用textscan
将文件解析为文本,这比调用COM要快得多(更不用说移植到Windows以外的其他平台)