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' xxreplacematrix中元素的数量。

我试过这个:

 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中元素的数量。