Writing multiple structures to user specified excel file

I have a variable amount of structures with 4 fields, each containing 1x1 blocks of data. How would I go about writing multiple structures to a user specified excel file?

2 comentarios

Can you give an example?
Sure, they look like this, in general.

Iniciar sesión para comentar.

 Respuesta aceptada

Azzi Abdelmalek
Azzi Abdelmalek el 5 de Abr. de 2016
Editada: Azzi Abdelmalek el 5 de Abr. de 2016
load Example
v=[struct2cell(Data1.data)]
out=v(:,:)'
xlswrite('file.xlsx',out)

18 comentarios

What if I have multiple structures to consider? Essentially the program allows calculations to be ran against user specified mat files that contain damage information, for each file they select, another structure is created. What I need it for every structure to be outputted to the same, user-specified excel file.
You need to provide more details, how many fields for each data? do you want to store the data in different sheets?
The data is exactly the same as that example, but instead of being 10x4, it might be 200x4, or 150x4, but the heading and everything is exactly the same. The data does not need to be stored in different sheets. Also, the PINs are unique, not in numerical order like I had put in the example (not sure if it's confidential information or not). Just imagine having n structures within one structure, with data corresponding to PIN, Displacement, Damage, and hours in each of the structures.
Ok, your data are in one mat file or in different mat files?
Well, the data is created within the program and stored as a variable, so it is all in one file.
You have to make things clear. all your variables are stored in one mat file? do you mean that you are creating several variables with different names? If it's in the program, can you show us the part of your program that are creating these variables, because it's a bad idea to create different variables names, when you can store all your data in one variable
The code is below. The program reads a mat file, copies the data to a structure, reads another mat file, copies similar data to another structure, and so on.
Essentially, if the user selects two mat files to be processed, two structures would be created. I then need these two structures to be exported to an excel spreadsheet, the same spreadsheet, on the same page.
filepath1 = 'C:\Users\it58528\Desktop\13.5 Stuff\13.5 Mat Files\';
filename = uigetfile('*.*', 'All Files (*.*)','MultiSelect','on');
for n=1:length(filename)
data1{n} = load([filepath1 filename{n}]);
end
for i=1:length(data1)
for j=1:length(data1{i}.PIN)
Data(i).data(j).PIN = data1{i}.PIN(j).PIN;
Data(i).data(j).hours = data1{i}.PIN(j).hours;
Data(i).data(j).Disp = data1{i}.PIN(j).Displacement;
Data(i).data(j).damage = sum(sum((data1{i}.PIN(j).LoadProfilePercent.*DamagenewTable),1));
end
end
Azzi Abdelmalek
Azzi Abdelmalek el 5 de Abr. de 2016
Editada: Azzi Abdelmalek el 5 de Abr. de 2016
filename = uigetfile('*.*', 'All Files (*.*)','MultiSelect','on');
for n=1:length(filename)
data1{n} = load(filename{n});
end
out=[];
for i=1:length(data1)
v=[struct2cell(data1{i}.Data1.data)]
out=[out;v(:,:)']
end
xlswrite('file.xlsx',out)
That works, but it seems to be overwriting previous entries, how would I get around that?
What do you mean?
maybe you have used my code before editing it. copy it now and try again
Well, here is the code I adapted from yours.
for i=1:length(data1)
v=[struct2cell(Data(i).data)];
out=[v(:,:)'];
end
So what it does is it goes through the structure Data(1).data, converts it to a cell array, cleans up the formatting, and is stored in the variable 'out'. Now when it moves on to the second part of the structure, Data(2).data, the data from the first structure (Data(1).data) are overwritten, leaving only data from Data(2).data in the cell array. What I need is for them both to be in the same table.
This is not my code, What I've posted is:
out=[];
for i=1:length(data1)
v=[struct2cell(data1{i}.Data1.data)]
out=[out;v(:,:)']
end
Your code attempts to access a non-existent structure, I simply modified it so it does what I need it to do. The issue is still the same, the data from one structure is getting over written, but I need all the data to be in a single variable, 'out'.
post your modified code
filepath1 = 'C:\Users\it58528\Desktop\13.5 Stuff\13.5 Mat Files\';
filename = uigetfile('*.*', 'All Files (*.*)','MultiSelect','on');
for n=1:length(filename)
data1{n} = load([filepath1 filename{n}]);
end
for i=1:length(data1)
for j=1:length(data1{i}.PIN)
Data(i).data(j).PIN = data1{i}.PIN(j).PIN;
Data(i).data(j).hours = data1{i}.PIN(j).hours;
Data(i).data(j).Disp = data1{i}.PIN(j).Displacement;
Data(i).data(j).damage = sum(sum((data1{i}.PIN(j).LoadProfilePercent.*DamagenewTable),1));
end
end
for i=1:length(data1)
v=[struct2cell(Data(i).data)];
out=[v(:,:)'];
end
You did not look at my code!
out=[]
for i=1:length(data1)
v=[struct2cell(Data(i).data)];
out=[out;v(:,:)'];
end
Oh that worked! Thank you!

Iniciar sesión para comentar.

Más respuestas (0)

Preguntada:

el 5 de Abr. de 2016

Comentada:

el 5 de Abr. de 2016

Community Treasure Hunt

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

Start Hunting!

Translated by