version 1.78, 2003/12/09 17:00:07
|
version 1.81.2.2, 2004/04/06 19:09:10
|
Line 163 sub BuildStudentAssessmentPage {
|
Line 163 sub BuildStudentAssessmentPage {
|
# |
# |
$single_student_mode = 0; |
$single_student_mode = 0; |
$single_student_mode = 1 if ($ENV{'form.SelectedStudent'}); |
$single_student_mode = 1 if ($ENV{'form.SelectedStudent'}); |
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
|
['selectstudent']); |
if ($ENV{'form.selectstudent'}) { |
if ($ENV{'form.selectstudent'}) { |
&Apache::lonstatistics::DisplayClasslist($r); |
&Apache::lonstatistics::DisplayClasslist($r); |
return; |
return; |
Line 909 You may consider reducing the number of
|
Line 911 You may consider reducing the number of
|
have selected. |
have selected. |
</p><p> |
</p><p> |
LON-CAPA can produce <b>CSV</b> files of this data or Excel files of the |
LON-CAPA can produce <b>CSV</b> files of this data or Excel files of the |
summary data (<b>Scores Sum</b> or <b>Scores Sum & Totals</b>). |
<b>Scores Summary</b> data. |
</p> |
</p> |
END |
END |
$request_aborted = 1; |
$request_aborted = 1; |
Line 1017 END
|
Line 1019 END
|
$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 |
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, |
Line 1035 END
|
Line 1042 END
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
($rows_output,$cols_output-1); |
($rows_output,$cols_output-1); |
$seq->{'Excel:endcol'}=$cols_output-1; |
$seq->{'Excel:endcol'}=$cols_output-1; |
# Determine cell the score is held in |
|
$seq->{'Excel:scorecell'} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$cols_output); |
|
$seq->{'Excel:scorecol'}=$cols_output; |
|
$excel_sheet->write($rows_output,$cols_output++,'score'); |
|
# Create the formula for summing up this sequence |
# Create the formula for summing up this sequence |
$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'}.')'); |
# |
} |
$total_formula_string.='+'. |
# Determine cell the score is held in |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
$seq->{'Excel:scorecell'} = |
($rows_output,$cols_output-1); |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
$excel_sheet->write($rows_output,$cols_output++,'maximum'); |
($rows_output,$cols_output); |
} elsif ($data eq 'sum and total') { |
$seq->{'Excel:scorecol'}=$cols_output; |
$excel_sheet->write($rows_output+1,$cols_output,'score'); |
if ($data eq 'parts correct total') { |
$total_formula_string.='+'. |
$excel_sheet->write($rows_output,$cols_output++,'parts correct'); |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output+1,$cols_output); |
|
$excel_sheet->write($rows_output+1,$cols_output+1,'maximum'); |
|
$cols_output += 2; |
|
} elsif ($data eq 'parts correct total') { |
|
$excel_sheet->write($rows_output+1,$cols_output,'parts correct'); |
|
$total_formula_string.='+'. |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output+1,$cols_output); |
|
$excel_sheet->write($rows_output+1,$cols_output+1,'maximum'); |
|
$cols_output += 2; |
|
} else { |
} else { |
$cols_output++; |
$excel_sheet->write($rows_output,$cols_output++,'score'); |
} |
} |
|
# |
|
$total_formula_string.='+'. |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$cols_output-1); |
|
$excel_sheet->write($rows_output,$cols_output++,'maximum'); |
} |
} |
$excel_sheet->write($rows_output,$cols_output,'Grand Total'); |
$excel_sheet->write($rows_output,$cols_output++,'Grand Total'); |
$total_formula = $excel_sheet->store_formula($total_formula_string); |
$total_formula = $excel_sheet->store_formula($total_formula_string); |
# |
# |
# Bookkeeping |
# Bookkeeping |
Line 1091 END
|
Line 1086 END
|
# |
# |
# Add the maximums for each sequence or assessment |
# Add the maximums for each sequence or assessment |
my %total_cell_translation; |
my %total_cell_translation; |
|
my $grand_total = 0; |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
$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 1120 END
|
Line 1116 END
|
if (! ($data eq 'sum only' || $data eq 'parts correct')) { |
if (! ($data eq 'sum only' || $data eq 'parts correct')) { |
$excel_sheet->write($rows_output,$cols_output++,''); |
$excel_sheet->write($rows_output,$cols_output++,''); |
} |
} |
my %replaceCells; |
# |
$replaceCells{$seq->{'Excel:startcell'}} = |
if ($data eq 'tries' || $data eq 'scores') { |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
my %replaceCells; |
($rows_output,$seq->{'Excel:startcol'}); |
$replaceCells{$seq->{'Excel:startcell'}} = |
$replaceCells{$seq->{'Excel:endcell'}} = |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
($rows_output,$seq->{'Excel:startcol'}); |
($rows_output,$seq->{'Excel:endcol'}); |
$replaceCells{$seq->{'Excel:endcell'}} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$seq->{'Excel:endcol'}); |
|
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
|
$seq->{'Excel:sum'},undef, |
|
%replaceCells); |
|
} else { |
|
$excel_sheet->write($rows_output,$cols_output++, |
|
$max); |
|
} |
|
$grand_total+=$max; |
|
} |
|
if ($data eq 'tries' || $data eq 'scores') { |
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
$seq->{'Excel:sum'},undef, |
$total_formula,undef, |
%replaceCells); |
%total_cell_translation); |
|
} else { |
|
$excel_sheet->write($rows_output,$cols_output++,$grand_total); |
} |
} |
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
|
$total_formula,undef, |
|
%total_cell_translation); |
|
$rows_output++; |
$rows_output++; |
# |
# |
# Let the user know what we are doing |
# Let the user know what we are doing |
Line 1207 sub excel_outputstudent {
|
Line 1214 sub excel_outputstudent {
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
($rows_output,$seq->{'Excel:endcol'}); |
($rows_output,$seq->{'Excel:endcol'}); |
# The undef is for the format |
# The undef is for the format |
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
if (scalar(keys(%replaceCells)) == 1) { |
$seq->{'Excel:sum'},undef, |
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
%replaceCells); |
$seq->{'Excel:sum'},undef, |
|
%replaceCells,%replaceCells); |
|
} else { |
|
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
|
$seq->{'Excel:sum'},undef, |
|
%replaceCells); |
|
} |
# |
# |
$excel_sheet->write($rows_output,$cols_output++,$seq_max); |
$excel_sheet->write($rows_output,$cols_output++,$seq_max); |
} elsif ($data eq 'sum and total' || $data eq 'sum only' || |
} elsif ($data eq 'sum and total' || $data eq 'sum only' || |