它看起来像是names
一个cellstr
而不是一个char
数组。如果是这样,用括号索引它names(2)
会返回一个 1 长的 cellstr 数组,而不是 char 数组。当strcat
使用它的任何参数作为 cellstr 调用时,它返回一个 cellstr。然后xlsread
出错,因为它想要 a char
,而不是 a cellstr
。
而不是仅仅调用isstr
or ischar
on filename
,do class(filename)
,它会告诉你它是什么。
另一个线索是filename
用引号显示的。这就是 cellstr 的显示方式。如果它是一个 char 数组,它将不带引号显示。
如果是这种情况,并且names
是 cellstr,则需要使用{}
索引来“弹出”单元格内容。
filename = strcat('Pipeline_BO_2013_',names{2},'_CDBU.xlsx')
或者您可以使用sprintf
,您可能会发现它更具可读性,并且在您开始插入多个不同类型的参数后会更加灵活。
filename = sprintf('Pipeline_BO_2013_%s_CDBU.xlsx', names{2})
% An example of more flexibility:
year = 2013;
filename = sprintf('Pipeline_BO_%04d_%s_CDBU.xlsx', year, names{2})