version 1.81, 2004/01/27 16:58:05
|
version 1.85, 2004/02/11 16:02:37
|
Line 785 sub StudentAverageTotal {
|
Line 785 sub StudentAverageTotal {
|
$total_ave += $ave; |
$total_ave += $ave; |
my $max = $Statistics->{$seq->{'symb'}}->{'max'}; |
my $max = $Statistics->{$seq->{'symb'}}->{'max'}; |
$total_max += $max; |
$total_max += $max; |
if ($ave == 0) { |
$ave = sprintf("%.2f",$ave); |
$ave = "0.00"; |
|
} |
|
$ave .= ' '; |
|
$max .= ' '; |
|
$Str .= '<tr><td>'.$seq->{'title'}.'</td>'. |
$Str .= '<tr><td>'.$seq->{'title'}.'</td>'. |
'<td align="right">'.$ave.'</td>'. |
'<td align="right">'.$ave.' </td>'. |
'<td align="right">'.$max.'</td></tr>'."\n"; |
'<td align="right">'.$max.' '.'</td></tr>'."\n"; |
} |
} |
$total_ave = int(100*$total_ave)/100; # only two digit |
$total_ave = sprintf('%.2f',$total_ave); # only two digit |
$Str .= "</table>\n"; |
$Str .= "</table>\n"; |
$Str .= '<table border=2 cellspacing="1">'."\n"; |
$Str .= '<table border=2 cellspacing="1">'."\n"; |
$Str .= '<tr><th>Number of Students</th><th>Average</th>'. |
$Str .= '<tr><th>Number of Students</th><th>Average</th>'. |
"<th>Maximum</th></tr>\n"; |
"<th>Maximum</th></tr>\n"; |
$Str .= '<tr><td>'.($num_students-$nodata_count).'</td>'. |
$Str .= '<tr>'. |
'<td>'.$total_ave.'</td><td>'.$total_max.'</td>'; |
'<td align="right">'.($num_students-$nodata_count).'</td>'. |
|
'<td align="right">'.$total_ave.' '.'</td>'. |
|
'<td align="right">'.$total_max.' '.'</td>'; |
$Str .= "</table>\n"; |
$Str .= "</table>\n"; |
return $Str; |
return $Str; |
} |
} |
Line 958 END
|
Line 956 END
|
$sheetname = &Apache::loncommon::clean_excel_name($sheetname); |
$sheetname = &Apache::loncommon::clean_excel_name($sheetname); |
$excel_sheet = $excel_workbook->addworksheet($sheetname); |
$excel_sheet = $excel_workbook->addworksheet($sheetname); |
# |
# |
|
# Define some potentially useful formats |
|
my $format; |
|
$format->{'header'} = $excel_workbook->add_format(bold => 1, |
|
bottom => 1, |
|
align => 'center'); |
|
$format->{'bold'} = $excel_workbook->add_format(bold=>1); |
|
$format->{'h1'} = $excel_workbook->add_format(bold=>1, size=>18); |
|
$format->{'h2'} = $excel_workbook->add_format(bold=>1, size=>16); |
|
$format->{'h3'} = $excel_workbook->add_format(bold=>1, size=>14); |
|
$format->{'date'} = $excel_workbook->add_format(num_format=> |
|
'mmm d yyyy hh:mm AM/PM'); |
|
# |
# Put the course description in the header |
# Put the course description in the header |
$excel_sheet->write($rows_output,$cols_output++, |
$excel_sheet->write($rows_output,$cols_output++, |
$ENV{'course.'.$ENV{'request.course.id'}.'.description'}); |
$ENV{'course.'.$ENV{'request.course.id'}.'.description'}, |
|
$format->{'h1'}); |
$cols_output += 3; |
$cols_output += 3; |
# |
# |
# Put a description of the sections listed |
# Put a description of the sections listed |
Line 980 END
|
Line 991 END
|
$sectionstring = "Section ".$Sections[0]; |
$sectionstring = "Section ".$Sections[0]; |
} |
} |
} |
} |
$excel_sheet->write($rows_output,$cols_output++,$sectionstring); |
$excel_sheet->write($rows_output,$cols_output++,$sectionstring, |
|
$format->{'h3'}); |
$cols_output += scalar(@Sections); |
$cols_output += scalar(@Sections); |
# |
# |
# Put the date in there too |
# Put the date in there too |
$excel_sheet->write($rows_output++,$cols_output++, |
$excel_sheet->write($rows_output++,$cols_output++, |
'Compiled on '.localtime(time)); |
'Compiled on '.localtime(time),$format->{'h3'}); |
# |
# |
$cols_output = 0; |
$cols_output = 0; |
$excel_sheet->write($rows_output++,$cols_output++,$datadescription); |
$excel_sheet->write($rows_output++,$cols_output++,$datadescription, |
|
$format->{'h3'}); |
# |
# |
if ($data eq 'tries' || $data eq 'scores') { |
if ($data eq 'tries' || $data eq 'scores') { |
$rows_output++; |
$rows_output++; |
Line 997 END
|
Line 1010 END
|
# Add the student headers |
# Add the student headers |
$cols_output = 0; |
$cols_output = 0; |
foreach my $field (&get_student_fields_to_show()) { |
foreach my $field (&get_student_fields_to_show()) { |
$excel_sheet->write($rows_output,$cols_output++,$field); |
$excel_sheet->write($rows_output,$cols_output++,$field, |
|
$format->{'bold'}); |
} |
} |
my $row_offset = 0; |
my $row_offset = 0; |
if ($data eq 'tries' || $data eq 'scores') { |
if ($data eq 'tries' || $data eq 'scores') { |
Line 1008 END
|
Line 1022 END
|
my $total_formula_string = '=0'; |
my $total_formula_string = '=0'; |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
$excel_sheet->write($rows_output+$row_offset, |
$excel_sheet->write($rows_output+$row_offset, |
$cols_output,$seq->{'title'}); |
$cols_output,$seq->{'title'},$format->{'h3'}); |
if ($data eq 'tries' || $data eq 'scores') { |
if ($data eq 'tries' || $data eq 'scores') { |
# Determine starting cell |
# Determine starting cell |
$seq->{'Excel:startcell'}= |
$seq->{'Excel:startcell'}= |
Line 1016 END
|
Line 1030 END
|
($rows_output,$cols_output); |
($rows_output,$cols_output); |
$seq->{'Excel:startcol'}=$cols_output; |
$seq->{'Excel:startcol'}=$cols_output; |
# Put the names of the problems and parts into the sheet |
# Put the names of the problems and parts into the sheet |
|
my $count = 0; |
foreach my $res (@{$seq->{'contents'}}) { |
foreach my $res (@{$seq->{'contents'}}) { |
next if ($res->{'type'} ne 'assessment'); |
if ($res->{'type'} ne 'assessment' || |
|
! exists($res->{'parts'}) || |
|
ref($res->{'parts'}) ne 'ARRAY' || |
|
scalar(@{$res->{'parts'}}) < 1) { |
|
next; |
|
} |
if (scalar(@{$res->{'parts'}}) > 1) { |
if (scalar(@{$res->{'parts'}}) > 1) { |
foreach my $part (@{$res->{'parts'}}) { |
foreach my $part (@{$res->{'parts'}}) { |
$excel_sheet->write($rows_output, |
$excel_sheet->write($rows_output, |
$cols_output++, |
$cols_output++, |
$res->{'title'}.' part '.$part); |
$res->{'title'}.' part '.$part, |
|
$format->{'bold'}); |
} |
} |
} else { |
} else { |
$excel_sheet->write($rows_output, |
$excel_sheet->write($rows_output, |
$cols_output++, |
$cols_output++, |
$res->{'title'}); |
$res->{'title'},$format->{'bold'}); |
} |
} |
|
$count++; |
} |
} |
# Determine ending cell |
# Determine ending cell |
$seq->{'Excel:endcell'} = |
if ($count == 1) { |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
$seq->{'Excel:endcell'} = $seq->{'Excel:startcell'}; |
($rows_output,$cols_output-1); |
$seq->{'Excel:endcol'} = $seq->{'Excel:startcol'}; |
$seq->{'Excel:endcol'}=$cols_output-1; |
} else { |
|
$seq->{'Excel:endcell'} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$cols_output-1); |
|
$seq->{'Excel:endcol'} = $cols_output-1; |
|
} |
# Create the formula for summing up this sequence |
# Create the formula for summing up this sequence |
|
if (! exists($seq->{'Excel:endcell'}) || |
|
! defined($seq->{'Excel:endcell'})) { |
|
$seq->{'Excel:endcell'} = $seq->{'Excel:startcell'}; |
|
} |
$seq->{'Excel:sum'}= $excel_sheet->store_formula |
$seq->{'Excel:sum'}= $excel_sheet->store_formula |
('=SUM('.$seq->{'Excel:startcell'}. |
('=SUM('.$seq->{'Excel:startcell'}. |
':'.$seq->{'Excel:endcell'}.')'); |
':'.$seq->{'Excel:endcell'}.')'); |
Line 1046 END
|
Line 1077 END
|
($rows_output,$cols_output); |
($rows_output,$cols_output); |
$seq->{'Excel:scorecol'}=$cols_output; |
$seq->{'Excel:scorecol'}=$cols_output; |
if ($data eq 'parts correct total') { |
if ($data eq 'parts correct total') { |
$excel_sheet->write($rows_output,$cols_output++,'parts correct'); |
$excel_sheet->write($rows_output,$cols_output++,'parts correct', |
|
$format->{'bold'}); |
} else { |
} else { |
$excel_sheet->write($rows_output,$cols_output++,'score'); |
$excel_sheet->write($rows_output,$cols_output++,'score', |
|
$format->{'bold'}); |
} |
} |
# |
# |
$total_formula_string.='+'. |
$total_formula_string.='+'. |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
($rows_output,$cols_output-1); |
($rows_output,$cols_output-1); |
$excel_sheet->write($rows_output,$cols_output++,'maximum'); |
$excel_sheet->write($rows_output,$cols_output++,'maximum', |
|
$format->{'bold'}); |
} |
} |
$excel_sheet->write($rows_output,$cols_output++,'Grand Total'); |
$excel_sheet->write($rows_output,$cols_output++,'Grand Total', |
|
$format->{'bold'}); |
$total_formula = $excel_sheet->store_formula($total_formula_string); |
$total_formula = $excel_sheet->store_formula($total_formula_string); |
# |
# |
# Bookkeeping |
# Bookkeeping |
Line 1071 END
|
Line 1106 END
|
foreach my $field (&get_student_fields_to_show()) { |
foreach my $field (&get_student_fields_to_show()) { |
if ($field eq 'username' || $field eq 'fullname' || |
if ($field eq 'username' || $field eq 'fullname' || |
$field eq 'id') { |
$field eq 'id') { |
$excel_sheet->write($rows_output,$cols_output++,'Maximum'); |
$excel_sheet->write($rows_output,$cols_output++,'Maximum', |
|
$format->{'bold'}); |
} else { |
} else { |
$excel_sheet->write($rows_output,$cols_output++,''); |
$excel_sheet->write($rows_output,$cols_output++,''); |
} |
} |
Line 1138 END
|
Line 1174 END
|
# |
# |
# Let the user know what we are doing |
# Let the user know what we are doing |
my $studentcount = scalar(@Apache::lonstatistics::Students); |
my $studentcount = scalar(@Apache::lonstatistics::Students); |
$r->print("<h1>Compiling Excel spreadsheet for ". |
if ($ENV{'form.SelectedStudent'}) { |
$studentcount.' student'); |
$studentcount = '1'; |
$r->print('s') if ($studentcount > 1); |
} |
$r->print("</h1>\n"); |
if ($studentcount > 1) { |
|
$r->print('<h1>'.&mt('Compiling Excel spreadsheet for [_1] students', |
|
$studentcount)."</h1>\n"); |
|
} else { |
|
$r->print('<h1>'. |
|
&mt('Compiling Excel spreadsheet for 1 student'). |
|
"</h1>\n"); |
|
} |
$r->rflush(); |
$r->rflush(); |
# |
# |
# Initialize progress window |
# Initialize progress window |
Line 1179 sub excel_outputstudent {
|
Line 1222 sub excel_outputstudent {
|
# Write out sequence scores and totals data |
# Write out sequence scores and totals data |
my %total_cell_translation; |
my %total_cell_translation; |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
|
$cols_output = $seq->{'Excel:startcol'}; |
# Keep track of cells to translate in total cell |
# Keep track of cells to translate in total cell |
$total_cell_translation{$seq->{'Excel:scorecell'}} = |
$total_cell_translation{$seq->{'Excel:scorecell'}} = |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
Line 1230 sub excel_outputstudent {
|
Line 1274 sub excel_outputstudent {
|
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
$total_formula,undef, |
$total_formula,undef, |
%total_cell_translation); |
%total_cell_translation); |
|
|
# |
# |
# Bookkeeping |
# Bookkeeping |
$rows_output++; |
$rows_output++; |