我正在使用MATLAB R2009a并遵循此示例:
我想编辑它,以便我可以将未知大小的矩阵写入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')错误。
提前感谢您提出的任何建议。
答案 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
中的元素数量。