--- loncom/interface/statistics/lonstudentassessment.pm 2004/02/11 16:02:37 1.85 +++ loncom/interface/statistics/lonstudentassessment.pm 2004/02/11 17:42:34 1.86 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonstudentassessment.pm,v 1.85 2004/02/11 16:02:37 matthew Exp $ +# $Id: lonstudentassessment.pm,v 1.86 2004/02/11 17:42:34 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1007,28 +1007,30 @@ END $rows_output++; } # + # Figure out the rows we need + my $sequence_name_row = $rows_output+1; + my $resource_name_row = $sequence_name_row+1; + my $maximum_data_row = $sequence_name_row+2; + my $first_data_row = $sequence_name_row+3; + # # Add the student headers $cols_output = 0; foreach my $field (&get_student_fields_to_show()) { - $excel_sheet->write($rows_output,$cols_output++,$field, + $excel_sheet->write($resource_name_row,$cols_output++,$field, $format->{'bold'}); } - my $row_offset = 0; - if ($data eq 'tries' || $data eq 'scores') { - $row_offset = -1; - } # # Add the remaining column headers my $total_formula_string = '=0'; foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { - $excel_sheet->write($rows_output+$row_offset, + $excel_sheet->write($sequence_name_row,, $cols_output,$seq->{'title'},$format->{'h3'}); + # Determine starting cell + $seq->{'Excel:startcell'}= + &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell + ($maximum_data_row,$cols_output); + $seq->{'Excel:startcol'}=$cols_output; 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 my $count = 0; foreach my $res (@{$seq->{'contents'}}) { @@ -1040,13 +1042,13 @@ END } if (scalar(@{$res->{'parts'}}) > 1) { foreach my $part (@{$res->{'parts'}}) { - $excel_sheet->write($rows_output, + $excel_sheet->write($resource_name_row, $cols_output++, $res->{'title'}.' part '.$part, $format->{'bold'}); } } else { - $excel_sheet->write($rows_output, + $excel_sheet->write($resource_name_row, $cols_output++, $res->{'title'},$format->{'bold'}); } @@ -1059,7 +1061,7 @@ END } else { $seq->{'Excel:endcell'} = &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell - ($rows_output,$cols_output-1); + ($maximum_data_row,$cols_output-1); $seq->{'Excel:endcol'} = $cols_output-1; } # Create the formula for summing up this sequence @@ -1074,42 +1076,38 @@ END # Determine cell the score is held in $seq->{'Excel:scorecell'} = &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell - ($rows_output,$cols_output); + ($maximum_data_row,$cols_output); $seq->{'Excel:scorecol'}=$cols_output; if ($data eq 'parts correct total') { - $excel_sheet->write($rows_output,$cols_output++,'parts correct', + $excel_sheet->write($resource_name_row,$cols_output++, + 'parts correct', $format->{'bold'}); } else { - $excel_sheet->write($rows_output,$cols_output++,'score', + $excel_sheet->write($resource_name_row,$cols_output++, + 'score', $format->{'bold'}); } # $total_formula_string.='+'. &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell - ($rows_output,$cols_output-1); - $excel_sheet->write($rows_output,$cols_output++,'maximum', + ($maximum_data_row,$cols_output-1); + $excel_sheet->write($resource_name_row,$cols_output++, + 'maximum', $format->{'bold'}); } - $excel_sheet->write($rows_output,$cols_output++,'Grand Total', + $excel_sheet->write($resource_name_row,$cols_output++,'Grand Total', $format->{'bold'}); $total_formula = $excel_sheet->store_formula($total_formula_string); # - # Bookkeeping - if ($data eq 'sum and total' || $data eq 'parts correct total') { - $rows_output += 2; - } else { - $rows_output += 1; - } - # # Output a row for MAX $cols_output = 0; foreach my $field (&get_student_fields_to_show()) { if ($field eq 'username' || $field eq 'fullname' || $field eq 'id') { - $excel_sheet->write($rows_output,$cols_output++,'Maximum', + $excel_sheet->write($maximum_data_row,$cols_output++,'Maximum', $format->{'bold'}); } else { - $excel_sheet->write($rows_output,$cols_output++,''); + $excel_sheet->write($maximum_data_row,$cols_output++,''); } } # @@ -1119,7 +1117,7 @@ END 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'}); + ($maximum_data_row,$seq->{'Excel:scorecol'}); my $weight; my $max = 0; foreach my $resource (@{$seq->{'contents'}}) { @@ -1135,42 +1133,42 @@ END } } if ($data eq 'scores') { - $excel_sheet->write($rows_output,$cols_output++,$weight); + $excel_sheet->write($maximum_data_row,$cols_output++,$weight); } elsif ($data eq 'tries') { - $excel_sheet->write($rows_output,$cols_output++,''); + $excel_sheet->write($maximum_data_row,$cols_output++,''); } $max += $weight; } } if (! ($data eq 'sum only' || $data eq 'parts correct')) { - $excel_sheet->write($rows_output,$cols_output++,''); + $excel_sheet->write($maximum_data_row,$cols_output++,''); } # if ($data eq 'tries' || $data eq 'scores') { my %replaceCells; $replaceCells{$seq->{'Excel:startcell'}} = &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell - ($rows_output,$seq->{'Excel:startcol'}); + ($maximum_data_row,$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++, + ($maximum_data_row,$seq->{'Excel:endcol'}); + $excel_sheet->repeat_formula($maximum_data_row,$cols_output++, $seq->{'Excel:sum'},undef, %replaceCells); } else { - $excel_sheet->write($rows_output,$cols_output++, + $excel_sheet->write($maximum_data_row,$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($maximum_data_row,$cols_output++, $total_formula,undef, %total_cell_translation); } else { - $excel_sheet->write($rows_output,$cols_output++,$grand_total); + $excel_sheet->write($maximum_data_row,$cols_output++,$grand_total); } - $rows_output++; + $rows_output = $first_data_row; # # Let the user know what we are doing my $studentcount = scalar(@Apache::lonstatistics::Students);