version 1.75, 2003/11/20 20:21:17
|
version 1.76, 2003/12/05 21:04:34
|
Line 56 use Apache::loncoursedata;
|
Line 56 use Apache::loncoursedata;
|
use Apache::lonnet; # for logging porpoises |
use Apache::lonnet; # for logging porpoises |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Spreadsheet::WriteExcel; |
use Spreadsheet::WriteExcel; |
|
use Spreadsheet::WriteExcel::Utility(); |
|
|
####################################################### |
####################################################### |
####################################################### |
####################################################### |
Line 859 my $cols_output;
|
Line 860 my $cols_output;
|
my %prog_state; # progress window state |
my %prog_state; # progress window state |
my $request_aborted; |
my $request_aborted; |
|
|
|
my $total_formula; |
|
|
sub excel_initialize { |
sub excel_initialize { |
my ($r) = @_; |
my ($r) = @_; |
# |
# |
Line 869 sub excel_initialize {
|
Line 872 sub excel_initialize {
|
undef ($cols_output); |
undef ($cols_output); |
undef (%prog_state); |
undef (%prog_state); |
undef ($request_aborted); |
undef ($request_aborted); |
|
undef ($total_formula); |
# |
# |
my $total_columns = scalar(&get_student_fields_to_show()); |
my $total_columns = scalar(&get_student_fields_to_show()); |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
Line 1000 END
|
Line 1004 END
|
} |
} |
# |
# |
# Add the remaining column headers |
# Add the remaining column headers |
|
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'}); |
if ($data eq 'tries' || $data eq 'scores') { |
if ($data eq 'tries' || $data eq 'scores') { |
|
# Determine starting cell |
|
$seq->{'Excel:startcell'}= |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$cols_output); |
|
$seq->{'Excel:startcol'}=$cols_output; |
|
# 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'); |
next if ($res->{'type'} ne 'assessment'); |
if (scalar(@{$res->{'parts'}}) > 1) { |
if (scalar(@{$res->{'parts'}}) > 1) { |
Line 1018 END
|
Line 1029 END
|
$res->{'title'}); |
$res->{'title'}); |
} |
} |
} |
} |
|
# Determine ending cell |
|
$seq->{'Excel:endcell'} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$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'); |
$excel_sheet->write($rows_output,$cols_output++,'score'); |
|
# Create the formula for summing up this sequence |
|
$seq->{'Excel:sum'}= $excel_sheet->store_formula |
|
('=SUM('.$seq->{'Excel:startcell'}. |
|
':'.$seq->{'Excel:endcell'}.')'); |
|
# |
|
$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++,'maximum'); |
} elsif ($data eq 'sum and total' || $data eq 'parts correct total') { |
} elsif ($data eq 'sum and total') { |
$excel_sheet->write($rows_output+1,$cols_output,'score'); |
$excel_sheet->write($rows_output+1,$cols_output,'score'); |
|
$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; |
|
} 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'); |
$excel_sheet->write($rows_output+1,$cols_output+1,'maximum'); |
$cols_output += 2; |
$cols_output += 2; |
} else { |
} else { |
$cols_output++; |
$cols_output++; |
} |
} |
} |
} |
|
$excel_sheet->write($rows_output,$cols_output,'Grand Total'); |
|
$total_formula = $excel_sheet->store_formula($total_formula_string); |
# |
# |
# Bookkeeping |
# Bookkeeping |
if ($data eq 'sum and total' || $data eq 'parts correct total') { |
if ($data eq 'sum and total' || $data eq 'parts correct total') { |
Line 1048 END
|
Line 1089 END
|
} |
} |
# |
# |
# Add the maximums for each sequence or assessment |
# Add the maximums for each sequence or assessment |
|
my %total_cell_translation; |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
|
$total_cell_translation{$seq->{'Excel:scorecell'}} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$seq->{'Excel:scorecol'}); |
my $weight; |
my $weight; |
my $max = 0; |
my $max = 0; |
foreach my $resource (@{$seq->{'contents'}}) { |
foreach my $resource (@{$seq->{'contents'}}) { |
Line 1074 END
|
Line 1119 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++,''); |
} |
} |
$excel_sheet->write($rows_output,$cols_output++,$max); |
my %replaceCells; |
} |
$replaceCells{$seq->{'Excel:startcell'}} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$seq->{'Excel:startcol'}); |
|
$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); |
|
} |
|
$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 1119 sub excel_outputstudent {
|
Line 1176 sub excel_outputstudent {
|
} |
} |
# |
# |
# Write out sequence scores and totals data |
# Write out sequence scores and totals data |
|
my %total_cell_translation; |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
|
# Keep track of cells to translate in total cell |
|
$total_cell_translation{$seq->{'Excel:scorecell'}} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$seq->{'Excel:scorecol'}); |
|
# |
my ($performance,$performance_length,$score,$seq_max,$rawdata); |
my ($performance,$performance_length,$score,$seq_max,$rawdata); |
if ($base eq 'tries') { |
if ($base eq 'tries') { |
($performance,$performance_length,$score,$seq_max,$rawdata) = |
($performance,$performance_length,$score,$seq_max,$rawdata) = |
Line 1134 sub excel_outputstudent {
|
Line 1197 sub excel_outputstudent {
|
foreach my $value (@$rawdata) { |
foreach my $value (@$rawdata) { |
$excel_sheet->write($rows_output,$cols_output++,$value); |
$excel_sheet->write($rows_output,$cols_output++,$value); |
} |
} |
$excel_sheet->write($rows_output,$cols_output++,$score); |
# Write a formula for the sum of this sequence |
|
my %replaceCells; |
|
$replaceCells{$seq->{'Excel:startcell'}} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$seq->{'Excel:startcol'}); |
|
$replaceCells{$seq->{'Excel:endcell'}} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$seq->{'Excel:endcol'}); |
|
# The undef is for the format |
|
$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' || |
$data eq 'parts correct' || $data eq 'parts correct total') { |
$data eq 'parts correct' || $data eq 'parts correct total') { |
Line 1145 sub excel_outputstudent {
|
Line 1220 sub excel_outputstudent {
|
} |
} |
} |
} |
# |
# |
|
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
|
$total_formula,undef, |
|
%total_cell_translation); |
|
|
|
# |
# Bookkeeping |
# Bookkeeping |
$rows_output++; |
$rows_output++; |
$cols_output=0; |
$cols_output=0; |