MATLAB:将dynamicmatrix写入Excel
我正在使用MATLAB R2009a和以下示例:
http://uk.mathworks.com/help/matlab/matlab_external/using-a-matlab-application-as-an-automation-client.html
我想编辑它,这样我就可以将一个未知大小的matrix写入到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列,将数组放入数组之外的每个单元格中。 因为我只想列A填充,使用简单的('范围','A')错误也。
预先感谢您提供的任何build议。
你有问题,因为你试图直接在string中使用variablesp
range = 'A1:p'; 'A1:p'
这是不行的,你想包括p
的值 。 有很多方法可以做到这一点。
在你提供的代码中,你已经设置了p = 'A10'
所以如果你想把它附加到你的范围,你可以执行string连接
p = 'A10'; range = strcat('A1:', p);
我个人更喜欢使用sprintf
将数字直接放入我的string中,而不是串联一串string。
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(:);
本质上,这个想法是用'B1:Bxx'
xx
replacematrix中元素的数量。
我试过这个:
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;
以上是直接从你分享的链接。 为什么你要做的是失败的是,你传递到e.Activesheet.get()
是一个variables,而不是一个string。 要避免这种情况,请尝试以下操作:
B = randi([0 10],10,1) eActivesheetRange = e.Activesheet.get('Range',['B1:B' num2str(numel(B))]); eActivesheetRange.Value = B;
在这里, num2str(numel(B))
将传递一个string,这是B
中元素的个数。 这是可变的,因为它取决于B
中元素的数量。