从Excel导入matrix定义到MATLAB

我有一个Excel工作表,其中包含一个结构的定义,包括我想导入到MATLAB中的内容。 例如,两个Excel单元格中的定义可能如下所示,并保存为连接的string:

testCase.expectedSolution.long = [1,2,3 ; 4,5,6 ; 7,8,9]; testCase.expectedSolution.short = [10,11,12 ; 13,14,15 ; 16,17,18]; 

我将这些定义用作MATLAB中unit testing的预期解决scheme。 现在,我只是从Excel中复制粘贴到MATLAB代码中,以便在MATLAB中定义结构。 但是,我想知道是否有可能(并适合)将这些string导入到MATLAB中。 实际上,我有多达数千个将从Excel中的VBAmacros生成的string。

我创build了图像中显示的Excel工作簿,将其命名为Book1.xlsx并将其保存在我的工作目录中。

Excel工作簿

然后,我创build了下面的MATLAB脚本,它使用xlsread读取第一个工作表(Sheet1)的整个A列,然后使用eval来执行每个单元格中包含的string,就像在Command窗口中手动input每条指令一样:

 filename = 'Book1.xlsx'; sheet = 1; xlRange = 'A:A'; [~, txt, ~] = xlsread(filename, sheet, xlRange); for i = 1:size(txt, 1) eval(txt{i}); end 

这是输出:

 >> testCase.expectedSolution ans = long: [3x3 double] short: [3x3 double] 

eval要小心,因为:

eval函数的许多常见用法效率较低,比其他MATLAB函数和语言构造更难以阅读和debugging。 有关更多信息,请参阅eval函数的替代方法 。

我强烈build议你阅读教程:为什么variables不应被命名为dynamic(eval),以便了解使用eval的含义。

引用Sam Robert的回答 :

eval甚至是安全风险 – 如果用户input所选字符为system(''rm -r /''); a的stringsystem(''rm -r /''); a会发生什么情况system(''rm -r /''); a system(''rm -r /''); a ? 有什么不好的,就是这样。

你可以使用readtable或者importdata

xlsreaduiimport也可能工作,看到这个链接的可用选项 。