create a new variable based on excel sheet values

I wanted to import data from excel spread sheets from multiple sheets. So i used a loop
[~,sheet_name]=xlsfinfo('filename.xlsx')
for k=1:numel(sheet_name)
data{k}=xlsread('filename.xlsx',sheet_name{k})
end
Each sheets in the excel file has 5, 3, 4 column data (example)
I wanted to create two variables new_variable1 and new_variable2
When I read the excel sheets itself, how many columns the excel sheet has, I want to fill the new_variable1 with value 1, when reading the next sheet fill the new_variable1 with 2, and so on
So as per the example my new_variable1 will have values
new_variable1 = [ 1 1 1 1 1 2 2 2 3 3 3 3];
Similarly, when I read the excel sheets itself, how many columns the excel sheet has, I want to fill the new_variable2 with value 1 in the first row, when reading the next sheet fill the new_variable1 with 1 in the second row, and so on
So as per example, at last the values in new_variable2 will be
new_variable2 =
1 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 1 1 1 1
Please can someone help me write the code to get values in new_variable1 and new_variable2

 Réponse acceptée

fnm = 'test.xlsx';
snm = sheetnames(fnm)
snm = 3×1 string array
"Sheet1" "Sheet2" "Sheet3"
dat = cell(size(snm));
for k = 1:numel(dat)
dat{k} = readmatrix(fnm,'Sheet',snm{k});
end
%
nmc = cellfun(@width,dat);
v1 = repelem(1:numel(dat),nmc)
v1 = 1×12
1 1 1 1 1 2 2 2 3 3 3 3
v2 = v1==(1:numel(dat)).'
v2 = 3×12 logical array
1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1

5 commentaires

Elysi Cochin
Elysi Cochin le 25 Mar 2022
Modifié(e) : Elysi Cochin le 25 Mar 2022
Sir, i got this error
Error using cellfun
Check for missing argument or incorrect argument data type in call to function 'width'.
nmc = cellfun(@width,dat);
I am using Matlab version 2020a, also sir my data is .xls format
so will readmatrix work for .xls format
"so will readmatrix work for .xls format"
Yes.
"i got this error"
From R2020b WIDTH also works on arrays, not just on tables. For your version we could use:
nmc = cellfun('size',dat,2);
Sir one more doubt, what if i want to concatenate all the excel sheet values into one matrix variable instead of stoting it in a cell variable? What is the change i need to do?
Stephen23
Stephen23 le 26 Mar 2022
Modifié(e) : Stephen23 le 26 Mar 2022
After the loop:
mat = horzcat(dat{:})
thank you sir

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by