Grading system in excel sheet based on marks
Show older comments
I am tyring to paste grade on excel sheet based on marks
i do this but this shows only F in excel sheet .. i want if anybody has marks >=80 then want to show A grade .. and if anybody hay >=70 then B
and if anybody hay less than 70 then want to show F
clc;clear all
filename = 'PROJECT..xlsx';
table = readtable(filename);
data = xlsread(filename);
[r,c] = size(data);
total_courses = c;
table.SumofMarks = zeros(r,1);
table.Percentage = zeros(r,1);
table.StudentGrade = repmat({''},r,1);
% Sum of marks in different courses and their percentage.
format bank
Sum_of_Marks = sum(data,2);
Student_Percentage = Sum_of_Marks./c;
T = horzcat(Sum_of_Marks,Student_Percentage);
N = length(Student_Percentage);
R = reshape(Student_Percentage,1,[]); % convert matrix to row vector
for i = 1:1:N
if R>=80
table.StudentGrade{i} = 'A';
elseif R>=70
table.StudentGrade{i} = 'B';
elseif R <70
table.StudentGrade{i}= 'F';
end
end
writetable(table,filename)
xlswrite(filename,T,1,'H2')
i tried this but this code doesnt work
how i do this
i attached excel file
please help
3 Comments
Image Analyst
on 7 Jan 2021
You forgot to attach 'PROJECT..xlsx'.
busy girl
on 7 Jan 2021
busy girl
on 8 Jan 2021
Answers (1)
Alan Stevens
on 8 Jan 2021
Shouldn't you have
for i = 1:1:N
if R(i)>=80
table.StudentGrade{i} = 'A';
elseif R(i)>=70
table.StudentGrade{i} = 'B';
elseif R(i) <70
table.StudentGrade{i}= 'F';
end
end
11 Comments
busy girl
on 9 Jan 2021
Alan Stevens
on 9 Jan 2021
You have N defined two lines above this!! My code simply suggests replacing R with R(i). I can't test your code as you haven't supplied the xlsx file.
busy girl
on 9 Jan 2021
Alan Stevens
on 9 Jan 2021
The following runs for me without any errors:
filename = 'PROJECT..xlsx';
table = readtable(filename);
data = xlsread(filename);
[r,c] = size(data);
total_courses = c;
table.SumofMarks = zeros(r,1);
table.Percentage = zeros(r,1);
table.StudentGrade = repmat({''},r,1);
% Sum of marks in different courses and their percentage.
format bank
Sum_of_Marks = sum(data,2);
Student_Percentage = Sum_of_Marks./c;
T = horzcat(Sum_of_Marks,Student_Percentage);
N = length(Student_Percentage);
R = reshape(Student_Percentage,1,[]); % convert matrix to row vector
for i = 1:N
if R(i)>=80
table.StudentGrade{i} = 'A';
elseif R(i)>=70
table.StudentGrade{i} = 'B';
elseif R(i) <70
table.StudentGrade{i}= 'F';
end
end
writetable(table,filename)
xlswrite(filename,T,1,'H2')
Alan Stevens
on 9 Jan 2021
Hmm. Although my previous listing runs without error, the results are nonsense. For some reason the data is read in incorrectly. I had to coopy some of the original spreadsheet and paste it into another one to get sensible results. Here is a working code with sensible results:
filename = 'PROJECTb.xlsx';
fname = 'PROJECTRESULT.xlsx';
table = readtable(filename);
data = xlsread(filename);
[r,c] = size(data);
total_courses = c;
table.SumofMarks = zeros(r,1);
table.Percentage = zeros(r,1);
table.StudentGrade = repmat({''},r,1);
% Sum of marks in different courses and their percentage.
format bank
Sum_of_Marks = sum(data,2);
Student_Percentage = Sum_of_Marks./total_courses;
T = horzcat(Sum_of_Marks,Student_Percentage);
N = length(Student_Percentage);
table.SumofMarks = Sum_of_Marks;
table.Percentage = Student_Percentage;
R = Student_Percentage;
for i = 1:N
if R(i)>=80
table.StudentGrade{i} = 'A';
elseif R(i)>=70
table.StudentGrade{i} = 'B';
elseif R(i) <70
table.StudentGrade{i}= 'F';
end
end
writetable(table,fname)
The PROJECTb.xlsx file is attached.
busy girl
on 9 Jan 2021
busy girl
on 9 Jan 2021
Alan Stevens
on 9 Jan 2021
Edited: Alan Stevens
on 9 Jan 2021
I hadn't noticed the number 40 in your coding anywhere. My previous code sets F if total marks are less than 70. The code below shows one way of setting F if any mark is less than 40, or if the total is less than 70. This should be enough for you to modify if you want something else.
filename = 'PROJECTb.xlsx';
fname = 'PROJECTRESULT.xlsx';
table = readtable(filename);
data = xlsread(filename);
[r,c] = size(data);
total_courses = c;
table.SumofMarks = zeros(r,1);
table.Percentage = zeros(r,1);
table.StudentGrade = repmat({''},r,1);
I = find(data<40); %%%%%%%%%%%%%%%%%
[rowfail, colfail] = ind2sub(size(data),I); %%%%%%%%%%%%%%%%%
fails = unique(rowfail); %%%%%%%%%%%%%%%%%
% Sum of marks in different courses and their percentage.
format bank
Sum_of_Marks = sum(data,2);
Student_Percentage = Sum_of_Marks./total_courses;
T = horzcat(Sum_of_Marks,Student_Percentage);
N = length(Student_Percentage);
table.SumofMarks = Sum_of_Marks;
table.Percentage = Student_Percentage;
R = Student_Percentage;
for i = 1:N
if R(i)>=80
table.StudentGrade{i} = 'A';
elseif R(i)>=70
table.StudentGrade{i} = 'B';
elseif R(i) <70 || i==fails %%%%%%%%%%%%%%%%%
table.StudentGrade{i}= 'F';
end
end
writetable(table,fname)
Bushra ashiq
on 15 Jan 2021
hI ,, WHEN I try your code .. this shows an error
Operands to the || and && operators must be
convertible to logical scalar values.
Error in LABV1 (line 27)
elseif R(i) <41 && i==fails
Alan Stevens
on 15 Jan 2021
Come to think of it, that line should probably be
elseif R(i) <70 || ismember(i,fails)
Bushra ashiq
on 15 Jan 2021
hi.. i tried your code and add conditions like these just replace numbers 70 to 40.. but this paste according to total marks where as i want if there is less than 40 marks in any subject then want to paste F grade ..
filename = 'PROJECT..xlsx';
table = readtable(filename);
data = xlsread(filename);
[r,c] = size(data);
total_courses = c;
table.SumofMarks = zeros(r,1);
table.Percentage = zeros(r,1);
table.StudentGrade = repmat({''},r,1);
I = find(data<41);
[rowfail, colfail] = ind2sub(size(data),I);
fails = unique(rowfail);
% Sum of marks in different courses and their percentage.
format bank
Sum_of_Marks = sum(data,2);
Student_Percentage = Sum_of_Marks./total_courses;
T = horzcat(Sum_of_Marks,Student_Percentage);
N = length(Student_Percentage);
table.SumofMarks = Sum_of_Marks;
table.Percentage = Student_Percentage;
R = Student_Percentage;
for i = 1:N
if R(i)>=41 && R(i)<=99
table.StudentGrade{i} = 'A';
elseif R(i) >0 && R(i)<=40 || ismember(i,fails)
table.StudentGrade{i}= 'F';
end
end
writetable(table,filename)
Categories
Find more on MATLAB 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!