Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MATLAB: Write Dynamic matrix to Excel

Tags:

excel

matlab

I'm using MATLAB R2009a and following this example:

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

I'd like to edit it so that I can write a matrix of unknown size into a column in an excel sheet, therefore not explicitly stating the range. I've attempted it this way:

%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;

However, this errors out. I've tried several variations of this to no avail. For example, using 'A:B' puts this array in columns A and B in excel and a NAN into every cell beyond my array. As I only want column A filled, using simple ('Range','A') errors out also.

Thanks in advance for any advice you can offer.

like image 220
JPow Avatar asked Sep 13 '26 09:09

JPow


1 Answers

You're having issues because you're trying to use your variable p in a string directly

range = 'A1:p';

    'A1:p'

This isn't going to work, you want to include the value of p. There are a number of ways you can do this.

In the code you have provided, you have already set p = 'A10' so if you wanted to append that to your range, you'd perform string concatenation

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

I personally prefer to use sprintf to place the number directly into my strings rather than concatenating a bunch of strings.

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

    'A1:A10`

So if we adapt your code to use this we should get

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

Also just to be a little explicit, I would use numel rather than length as length is ambiguous. Also, I would flatten Hop into a column vector just to make sure that it's the proper dimension to be written to the spreadsheet.

eActivesheetRange.Value = Hop(:);
like image 89
Suever Avatar answered Sep 16 '26 08:09

Suever



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!