它看起来像是names一个cellstr而不是一个char数组。如果是这样,用括号索引它names(2)会返回一个 1 长的 cellstr 数组,而不是 char 数组。当strcat使用它的任何参数作为 cellstr 调用时,它返回一个 cellstr。然后xlsread出错,因为它想要 a char,而不是 a cellstr。
而不是仅仅调用isstror ischaron 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})