我有一张Excel工作表,其中包含一个结构的定义,包括我想要导入MATLAB的内容。例如,两个Excel单元格中的定义可能如下所示,并保存为串联字符串:
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中单元测试的预期解决方案。现在,我只是在复制&从Excel粘贴到MATLAB代码中,以便在MATLAB中定义结构。但是,我想知道是否可以(并且适合)将这些字符串导入MATLAB。实际上,我有多达数千个字符串将从Excel中的VBA宏生成。
答案 0 :(得分:1)
我创建了图像中显示的Excel工作簿,将其命名为Book1.xlsx
并将其保存在我的工作目录中。
然后我创建了以下MATLAB脚本,该脚本使用xlsread
读取第一个工作表(Sheet1)的整个A列,然后使用eval
执行每个单元格中包含的字符串,就像您会在命令窗口中手动输入每条指令:
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函数和语言相比,难以阅读和调试 结构体。有关详细信息,请参阅Alternatives to the eval Function。
我强烈建议您阅读TUTORIAL: Why Variables Should Not Be Named Dynamically (eval),以便了解使用eval
的含义。
eval
甚至存在安全风险 - 如果用户键入了一个,会发生什么 所选字符为system(''rm -r /''); a
的字符串? 有点不好,就是这样。
答案 1 :(得分:0)
您可以使用readtable
或importdata
。
xlsread
或uiimport
也可能有效,请参阅available options的此链接。