You are now following this question
- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.
Writing multiple structures to user specified excel file
1 view (last 30 days)
Show older comments
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 Comments
Accepted Answer
Azzi Abdelmalek
on 5 Apr 2016
Edited: Azzi Abdelmalek
on 5 Apr 2016
load Example
v=[struct2cell(Data1.data)]
out=v(:,:)'
xlswrite('file.xlsx',out)
18 Comments
Ibro Tutic
on 5 Apr 2016
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.
Azzi Abdelmalek
on 5 Apr 2016
You need to provide more details, how many fields for each data? do you want to store the data in different sheets?
Ibro Tutic
on 5 Apr 2016
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.
Ibro Tutic
on 5 Apr 2016
Well, the data is created within the program and stored as a variable, so it is all in one file.
Azzi Abdelmalek
on 5 Apr 2016
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
Ibro Tutic
on 5 Apr 2016
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
on 5 Apr 2016
Edited: Azzi Abdelmalek
on 5 Apr 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)
Ibro Tutic
on 5 Apr 2016
That works, but it seems to be overwriting previous entries, how would I get around that?
Azzi Abdelmalek
on 5 Apr 2016
maybe you have used my code before editing it. copy it now and try again
Ibro Tutic
on 5 Apr 2016
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.
Azzi Abdelmalek
on 5 Apr 2016
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
Ibro Tutic
on 5 Apr 2016
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'.
Ibro Tutic
on 5 Apr 2016
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
Azzi Abdelmalek
on 5 Apr 2016
You did not look at my code!
out=[]
for i=1:length(data1)
v=[struct2cell(Data(i).data)];
out=[out;v(:,:)'];
end
More Answers (0)
See Also
Categories
Find more on Spreadsheets in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)