MATLAB:将动态矩阵写入Excel

时间:2016-01-22 14:11:47

标签: excel matlab

我正在使用MATLAB R2009a并遵循此示例:

http://uk.mathworks.com/help/matlab/matlab_external/using-a-matlab-application-as-an-automation-client.html

我想编辑它,以便我可以将未知大小的矩阵写入Excel工作表的列中,因此不会明确说明范围。我试过这种方式:

%Put MATLAB data into the worksheet
Hop = [47; 53; 93; 10]; %Pretend I don't know what size this matrix is.
p = length(Hop);
p = strcat('A',num2str(p));
eActivesheetRange = e.Activesheet.get('Range','A1:p');
eActivesheetRange.Value = Hop;

但是,这个错误了。我尝试了几种不同的变化无济于事。例如,使用'A:B'将此数组放在excel中的A列和B列中,并将NAN放入我的数组之外的每个单元格中。因为我只想填充A列,所以也使用简单的('Range','A')错误。

提前感谢您提出的任何建议。

2 个答案:

答案 0 :(得分:3)

您遇到问题是因为您试图直接在字符串中使用变量p

range = 'A1:p';

    'A1:p'

这不会起作用,您想要包含p。有很多方法可以做到这一点。

在您提供的代码中,您已设置p = 'A10',因此如果您想将其附加到您的范围,则执行字符串连接

 p = 'A10';
 range = strcat('A1:', p);

我个人更喜欢使用sprintf将数字直接放入我的字符串中,而不是连接一串字符串。

p = 10;
range = sprintf('A1:A%d', p)

    'A1:A10`

因此,如果我们调整您的代码以使用它,我们应该

range = sprintf('A1:A%d', numel(Hop));
eActivesheetRange = e.Activesheet.get('Range', range);
eActivesheetRange.Value = Hop;

另外,为了明确一点,我会使用numel而不是length,因为length是不明确的。另外,我会将Hop展平为列向量,以确保它是要写入电子表格的正确尺寸。

eActivesheetRange.Value = Hop(:);

答案 1 :(得分:0)

基本上,我们的想法是将xx中的'B1:Bxx'替换为矩阵中的元素数。

我试过了:

e = actxserver('Excel.Application');
eWorkbook = e.Workbooks.Add;
e.Visible = 1;
eSheets = e.ActiveWorkbook.Sheets;
eSheet1 = eSheets.get('Item',1);
eSheet1.Activate;
A = [1 2 3 4];
eActivesheetRange = e.Activesheet.get('Range','A1:A4');
eActivesheetRange.Value = A;

以上内容直接来自您分享的链接。您尝试做的是失败的原因是您传入p的{​​{1}}是变量而不是字符串。要避免这种情况,请尝试以下操作:

e.Activesheet.get()

此处,B = randi([0 10],10,1) eActivesheetRange = e.Activesheet.get('Range',['B1:B' num2str(numel(B))]); eActivesheetRange.Value = B; 将传入一个字符串,即num2str(numel(B))中的元素数。这是可变的,因为它取决于B中的元素数量。