【问题标题】:Reading in xlsm file into MATLAB | Error file name must be string将 xlsm 文件读入 MATLAB |错误文件名必须是字符串
【发布时间】:2018-07-16 17:21:00
【问题描述】:

我正在尝试通过国家和年份的嵌套循环从 WIOD(世界输入输出数据库)中读取一整套环境输入/输出数据。现在我以前为基本/数据帐户做过类似的事情。现在我尝试加载环境数据。我之前的工作代码如下所示:

 for yr = 95:99
   V(:,:,yr-94) = xlsread(['wiot' num2str(yr)   '_row_apr12.xlsx'],['WIOT_19' 
   num2str(yr)],'E1443:BCI1448');
 end

现在我的代码无法处理错误消息“文件名必须是字符向量”。如下所示:

 country = 
{'AUS','AUT','BEL','BGR','BRA','CAN','CHN','CYP','CZE','DEU','DNK','ESP',...

'EST','FIN','FRA','GBR','GRC','HUN','IDN','IND','IRL','ITA','JPN','KOR',...

 'LTU','LUX','LVA','MEX','MLT','NLD','POL','PRT','ROU','RUS','SVK','SVN',...
       'SWE','TUR','TWN','USA','ROW'}

for c = 1:41

   for year = 1995:1995   

      F_NRG(:,(c*35)-34:(c*35),year-1994) = transpose(xlsread([country(c) 
     '_EU_May12.xlsm'],[num2str(year)],'AD2:AD36'));

   end
end

我不明白,因为如果我通过country(c) 选择国家c,文件名应该是一个字符串? xlsread 嵌套在转置命令中,我想保存读取数据的单元格的计算稍微复杂一些,但主要应该是相同的?下面的代码也为每个c 渲染一个字符串。

  for c = 1:41
    country(c)
  end 

你能帮我找出我的编码错误吗? Matlab为什么不能将文件名识别为字符串?

感谢您的帮助。

【问题讨论】:

  • 试试这个:F_NRG(:,(c*35)-34:(c*35),year-1994) = transpose(xlsread([country{c},... '_EU_May12.xlsm'],[num2str(year)],'AD2:AD36'));。如果要将代码分成两行,请在第一行末尾添加...。另外,country 是一个单元格数组,country(c) 给出一个 1x1 单元格,您需要 country{c} 来检索单元格中的值。
  • country(c) 是一个元胞数组,所以 [country(c) 'abc'] 是一个元胞数组。使用花括号来获取索引c 处的字符数组,如下所示:country{c}

标签: matlab loops for-loop xlsread


【解决方案1】:

试试这个,

for c = 1:41

   for year = 1995:1995   

      F_NRG(:,(c*35)-34:(c*35),year-1994) = transpose(xlsread([country{c} 
     '_EU_May12.xlsm'],[num2str(year)],'AD2:AD36'));

   end
end

【讨论】:

  • 不需要对字符串进行类型转换,只需要正确的括号 (ref)
  • 您好,感谢您提供令人难以置信的快速和有用的回答。那么 string() 没有工作。但是 char() 做到了。所以无论如何。太好了!
  • 好的,感谢 cmets 我也试试支架版本。
猜你喜欢
  • 1970-01-01
  • 2014-08-30
  • 2018-02-05
  • 1970-01-01
  • 2012-05-01
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
相关资源
最近更新 更多