将Excel中的矩阵定义导入MATLAB

时间:2017-02-13 11:02:53

标签: excel matlab import

我有一张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宏生成。

2 个答案:

答案 0 :(得分:1)

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

Excel workbook

然后我创建了以下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的含义。

引用Sam Robert's answer

  

eval甚至存在安全风险 - 如果用户键入了一个,会发生什么   所选字符为system(''rm -r /''); a的字符串?   有点不好,就是这样。

答案 1 :(得分:0)

您可以使用readtableimportdata

xlsreaduiimport也可能有效,请参阅available options的此链接。