Write pre-existing variable names and their values to excel

22 visualizaciones (últimos 30 días)
Hi Everyone,
I have a function that outputs a ton of variables, which all have useful names and numeric values.
I want to write the existing variable name to column 1 and the associated variable data to column 2, is this possible?
I've seen some xlswrite code examples, but none where the variable name and it's data are split before entry into the xls.
Cheers Nick

Respuesta aceptada

Stephen23
Stephen23 el 12 de Feb. de 2018
Editada: Stephen23 el 12 de Feb. de 2018
load the data into a variable (as the load documentation states, it is a structure):
Results_Struct = load('1102 XRAIL_Z_Values.mat');
You can then get the variable names using fieldnames:
Results_Names = fieldnames(Results_Struct);
As the help and that error message tell you, the input to xlswrite must be a numeric, logical or cell array. You can easily get a cell array from the structure using struct2cell:
Results_Cell = struct2cell(Results_Struct);
Assuming that load returned a scalar structure then Results_Cell will have size px1x1, where p is the number of fields in the structure (i.e. the number of variables in the .mat file). You must ensure that the contents of each cell is a scalar: if this is not the case then you will need to deal with this in whatever way appropriate to your data. You could optionally convert this data to a numeric matrix.
You now have everything you need to call xlswrite.
Note that load-ing into a structure and using fieldnames is more efficient and less buggy than load-ing straight into the workspace and using who or whos.
  3 comentarios
Oman Wisni
Oman Wisni el 14 de Oct. de 2018
I get error " unable to load file 1102 XRAIL_Z_Values.mat". where I can get this file ?
Vetei Vel
Vetei Vel el 2 de Jul. de 2020

I have many time series (by connecting to workspace block to model input and outputs) data saved in workspace after model run. Among these saved data I need few list of variables (146 - both bus and non bus variables) to be written to an Excel with its respective recorded values.. can any one help me on this please..

Iniciar sesión para comentar.

Más respuestas (3)

Pawel Jastrzebski
Pawel Jastrzebski el 12 de Feb. de 2018
If your variables are all numeric then consider the following code:
% create variables
a = 5;
b = 10;
c = 15;
d = 0;
d1 =1;
% get names
z_names = who;
% put names in the table
t = table(z_names);
% get values
z_values = [a b c d d1]';
% add values to the table
t.val = z_values;
% write table to excel
writetable(t,'excel.xlsx');% get values
z_values = [a b c d d1]';
t.val = z_values;
% write to excel
writetable(t,'excel.xlsx');

Nick Burnham
Nick Burnham el 12 de Feb. de 2018
I just tried your code and i get the following error:
"To assign to or create a variable in a table, the number of rows must match the height of the table."
However, i wasn't aware of the "who" function before. I think i can put your code with some of the xlswrite examples and get something to work, so, many thanks Pawel! :)
  1 comentario
Pawel Jastrzebski
Pawel Jastrzebski el 12 de Feb. de 2018
That message probably means that you're trying to add/create a new column in the table by using a row vector. If that's the case, transpose it first.

Iniciar sesión para comentar.


Nick Burnham
Nick Burnham el 12 de Feb. de 2018
Editada: Stephen23 el 12 de Feb. de 2018
OK, I've got the variable names to appear correctly but not the values. Can you help?
Variable Names: WORKING CORRECTLY
load('1102 XRAIL_Z_Values.mat');
Results_Names= who; %
filename = 'testdata.xls';
sheet=1;
xlRange='A1';
xlswrite(filename,Results_Names,sheet,xlRange);
winopen('testdata.xls');
Non working variable values:
ERROR: Error using xlswrite (line 165)
Input data must be a numeric, cell, or logical array.
Results_Values=load('1102 XRAIL_Z_Values.mat');
sheet=1;
xlRange='A2';
xlswrite(filename,Results_Values,sheet,xlRange);

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by