我想使用 [~, ~, temp] = xlsread('1.csv','A:A');
来获取 1 行 CSV 文件 1.csv
的第一列。1.csv
只包含一行:
但是返回的 temp
是 单元格。 temp
不应该是 单元格吗?
参数 'A:A'
应仅返回第一列的现有行,如 xlsread() documentation 中的“读取一列数据”示例所示。由于 temp
是 单元格,似乎使用 '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。 最佳答案
这实际上是 Excel COM 接口(interface)的工作方式,所以你不能责怪 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 以外的其他平台了)关于matlab - xlsread() 认为我的 1 行 CSV 有 1048576 行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16700909/