Saving multi excel sheets to one in MATALB

Hello all,
I have an excel file with 4 sheets: A, B, C, D and each sheet has it own data, i'd like to mix all data in just one sheet and write the value in front of each sheet's name, for example see the photo: thanks

3 comentarios

Karan Gill
Karan Gill el 13 de Jul. de 2016
Have you tried reading the four sheets into tables using readtable? Then you can concatenate the tables as [T1; T2; T3; T4] and write to them to a single sheet using writetable.
thank you for your suggestion, tried to use following code, but just showing the first sheet values!!
files=dir('*.xlsx');
[~, sheets] = xlsfinfo('Result.xlsx');
for i = 1:numel(sheets)
new = xlsread('Result.xlsx')
T = table(sheets,new)
% writetable(T,'Mergedresult.xlsx')
end
Guillaume
Guillaume el 15 de Jul. de 2016
Editada: Guillaume el 15 de Jul. de 2016
@Abo, well, inside your loop you don't specify the sheet to read from, so it's always reading from the first one.
@Karen, according to the example, each sheet would only have one row of data but a different number of columns. As tables, you wouldn't be able to concatenate them.

Iniciar sesión para comentar.

Respuestas (2)

Walter Roberson
Walter Roberson el 15 de Jul. de 2016
for i = 1:numel(sheets)
T{i} = xlsread('Result.xlsx', sheets{i});
end
Now each T{i} is the data from one sheet, with sheet name sheets{i} . You can manipulate this to get a common format. The best way to do that is going to depend on what your input sheets look like.
You would be wanting to figure out the widest that you need, and create a cell array that wide, in which the cells started out empty. Then fill rows of that with as much data as exists for one sheet, leaving the extra columns empty. The end result would be a cell array you could xlswrite()

1 comentario

Abo
Abo el 15 de Jul. de 2016
Editada: Abo el 15 de Jul. de 2016
thank you Walter, the out put of my code is like:
the value of sheet 'a' is: 0 191.931 'b': 0 493.4196 ... i'd like to sort it out in column rather than row, i meant the value for sheet 'a' under of the sheet's name... that is the method i developed;
files=dir('*.xlsx');
[~, sheets] = xlsfinfo('Result.xlsx');
for i = 1:numel(sheets)
new{i} = xlsread('Result.xlsx', sheets{i});
T = table(sheets,new);
writetable(T,'Mergedresult.xlsx') ;
end

Iniciar sesión para comentar.

Guillaume
Guillaume el 15 de Jul. de 2016
Editada: Guillaume el 18 de Jul. de 2016
files=dir('*.xlsx');
[~, sheets] = xlsfinfo('Result.xlsx');
sheetcontent = cellfun(@(sh) xlsread('Result.xlsx', sh), sheets, 'UniformOutput', false); %collect content of each sheet
%before concatenating the contents into one cell array, it needs to be the same size for all sheet
maxcols = max(cellfun(@numel, sheetcontent)); %maximum number of columns
sheetcontent = cellfun(@(c) [num2cell(c), cell(1, maxcols-numel(c))], sheetcontent, 'UniformOutput', false); %append empty cells
sheetcontent = vertcat(sheetcontent{:}); %and concatenate
xlswrite('Mergedresult.xlsx', [sheets(:), sheetcontent]);
edit 18/7/2015: bug

3 comentarios

Abo
Abo el 15 de Jul. de 2016
Editada: Abo el 15 de Jul. de 2016
thank you Guillaume, this error happens for sheetcontent = vertcat(sheetcontent{:}); !! any idea?
'Dimensions of matrices being concatenated are not consistent'
i think it is happened, because of different numbers in each sheet, but dont know how to solve it!!
Guillaume
Guillaume el 18 de Jul. de 2016
I made a mistake in the code that appends empty cells (to make the content of each sheet the same width). Fixed now.
Note that the above code assumes that xlsread only read ONE row per sheet.
Methil Muley
Methil Muley el 14 de Jul. de 2020
this give only for number not for characters

Iniciar sesión para comentar.

Categorías

Más información sobre Data Import from MATLAB en Centro de ayuda y File Exchange.

Preguntada:

Abo
el 11 de Jul. de 2016

Comentada:

el 14 de Jul. de 2020

Community Treasure Hunt

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

Start Hunting!

Translated by