Commit 122a5919 authored by Carsten Schmitz's avatar Carsten Schmitz

Fixed issue #7654: Better handling of numbers in Excel export - patch by slansky

parent 79cabcfe
...@@ -574,6 +574,8 @@ class statistics_helper { ...@@ -574,6 +574,8 @@ class statistics_helper {
*/ */
protected $sheet; protected $sheet;
protected $xlsPercents;
/** /**
* The current Excel workbook we are working on * The current Excel workbook we are working on
* *
...@@ -2343,8 +2345,8 @@ class statistics_helper { ...@@ -2343,8 +2345,8 @@ class statistics_helper {
$this->xlsRow++; $this->xlsRow++;
$this->sheet->write($this->xlsRow,0,$label[$i]); $this->sheet->write($this->xlsRow,0,$label[$i]);
$this->sheet->write($this->xlsRow,1,$grawdata[$i]); $this->sheet->writeNumber($this->xlsRow,1,$grawdata[$i]);
$this->sheet->write($this->xlsRow,2,sprintf("%01.2f", $gdata[$i]). "%"); $this->sheet->writeNumber($this->xlsRow,2,$gdata[$i]/100, $this->xlsPercents);
break; break;
case 'pdf': case 'pdf':
...@@ -2443,8 +2445,8 @@ class statistics_helper { ...@@ -2443,8 +2445,8 @@ class statistics_helper {
$this->xlsRow++; $this->xlsRow++;
$this->sheet->write($this->xlsRow,0,$label[$i]); $this->sheet->write($this->xlsRow,0,$label[$i]);
$this->sheet->write($this->xlsRow,1,$grawdata[$i]); $this->sheet->writeNumber($this->xlsRow,1,$grawdata[$i]);
$this->sheet->write($this->xlsRow,2,sprintf("%01.2f", $percentage)."%"); $this->sheet->writeNumber($this->xlsRow,2,$percentage/100, $this->xlsPercents);
break; break;
case 'pdf': case 'pdf':
...@@ -2505,9 +2507,9 @@ class statistics_helper { ...@@ -2505,9 +2507,9 @@ class statistics_helper {
$this->xlsRow++; $this->xlsRow++;
$this->sheet->write($this->xlsRow,0,$label[$i]); $this->sheet->write($this->xlsRow,0,$label[$i]);
$this->sheet->write($this->xlsRow,1,$grawdata[$i]); $this->sheet->writeNumber($this->xlsRow,1,$grawdata[$i]);
$this->sheet->write($this->xlsRow,2,sprintf("%01.2f", $percentage)."%"); $this->sheet->writeNumber($this->xlsRow,2,$percentage/100, $this->xlsPercents);
$this->sheet->write($this->xlsRow,3,sprintf("%01.2f", $percentage)."%"); $this->sheet->writeNumber($this->xlsRow,3,$percentage/100, $this->xlsPercents);
break; break;
case 'pdf': case 'pdf':
...@@ -2575,9 +2577,9 @@ class statistics_helper { ...@@ -2575,9 +2577,9 @@ class statistics_helper {
$this->xlsRow++; $this->xlsRow++;
$this->sheet->write($this->xlsRow,0,$label[$i]); $this->sheet->write($this->xlsRow,0,$label[$i]);
$this->sheet->write($this->xlsRow,1,$grawdata[$i]); $this->sheet->writeNumber($this->xlsRow,1,$grawdata[$i]);
$this->sheet->write($this->xlsRow,2,sprintf("%01.2f", $percentage)."%"); $this->sheet->writeNumber($this->xlsRow,2,$percentage/100, $this->xlsPercents);
$this->sheet->write($this->xlsRow,3,sprintf("%01.2f", $aggregatedgdata)."%"); $this->sheet->writeNumber($this->xlsRow,3,$aggregatedgdata/100, $this->xlsPercents);
break; break;
case 'pdf': case 'pdf':
...@@ -2640,9 +2642,9 @@ class statistics_helper { ...@@ -2640,9 +2642,9 @@ class statistics_helper {
$this->xlsRow++; $this->xlsRow++;
$this->sheet->write($this->xlsRow,0,$label[$i]); $this->sheet->write($this->xlsRow,0,$label[$i]);
$this->sheet->write($this->xlsRow,1,$grawdata[$i]); $this->sheet->writeNumber($this->xlsRow,1,$grawdata[$i]);
$this->sheet->write($this->xlsRow,2,sprintf("%01.2f", $percentage)."%"); $this->sheet->writeNumber($this->xlsRow,2,$percentage/100, $this->xlsPercents);
$this->sheet->write($this->xlsRow,3,sprintf("%01.2f", $aggregatedgdata)."%"); $this->sheet->writeNumber($this->xlsRow,3,$aggregatedgdata/100, $this->xlsPercents);
break; break;
case 'pdf': case 'pdf':
...@@ -2702,13 +2704,13 @@ class statistics_helper { ...@@ -2702,13 +2704,13 @@ class statistics_helper {
$this->xlsRow++; $this->xlsRow++;
$this->sheet->write($this->xlsRow,0,$statlang->gT("Sum")." (".$statlang->gT("Answers").")"); $this->sheet->write($this->xlsRow,0,$statlang->gT("Sum")." (".$statlang->gT("Answers").")");
$this->sheet->write($this->xlsRow,1,$sumitems); $this->sheet->writeNumber($this->xlsRow,1,$sumitems);
$this->sheet->write($this->xlsRow,2,$sumpercentage."%"); $this->sheet->writeNumber($this->xlsRow,2,$sumpercentage/100, $this->xlsPercents);
$this->sheet->write($this->xlsRow,3,$sumpercentage."%"); $this->sheet->writeNumber($this->xlsRow,3,$sumpercentage/100, $this->xlsPercents);
$this->xlsRow++; $this->xlsRow++;
$this->sheet->write($this->xlsRow,0,$statlang->gT("Number of cases")); $this->sheet->write($this->xlsRow,0,$statlang->gT("Number of cases"));
$this->sheet->write($this->xlsRow,1,$TotalCompleted); $this->sheet->writeNumber($this->xlsRow,1,$TotalCompleted);
$this->sheet->write($this->xlsRow,2,$casepercentage."%"); $this->sheet->writeNumber($this->xlsRow,2,$casepercentage/100, $this->xlsPercents);
break; break;
case 'pdf': case 'pdf':
...@@ -2752,8 +2754,8 @@ class statistics_helper { ...@@ -2752,8 +2754,8 @@ class statistics_helper {
$this->xlsRow++; $this->xlsRow++;
$this->sheet->write($this->xlsRow,0,$label[$i]); $this->sheet->write($this->xlsRow,0,$label[$i]);
$this->sheet->write($this->xlsRow,1,$grawdata[$i]); $this->sheet->writeNumber($this->xlsRow,1,$grawdata[$i]);
$this->sheet->write($this->xlsRow,2,sprintf("%01.2f", $gdata[$i])."%"); $this->sheet->writeNumber($this->xlsRow,2,$gdata[$i]/100, $this->xlsPercents);
break; break;
case 'pdf': case 'pdf':
...@@ -2882,11 +2884,11 @@ class statistics_helper { ...@@ -2882,11 +2884,11 @@ class statistics_helper {
$this->xlsRow++; $this->xlsRow++;
$this->sheet->write($this->xlsRow,0,$statlang->gT("Arithmetic mean")); $this->sheet->write($this->xlsRow,0,$statlang->gT("Arithmetic mean"));
$this->sheet->write($this->xlsRow,1,$am); $this->sheet->writeNumber($this->xlsRow,1,$am);
$this->xlsRow++; $this->xlsRow++;
$this->sheet->write($this->xlsRow,0,$statlang->gT("Standard deviation")); $this->sheet->write($this->xlsRow,0,$statlang->gT("Standard deviation"));
$this->sheet->write($this->xlsRow,1,$stddev); $this->sheet->writeNumber($this->xlsRow,1,$stddev);
break; break;
case 'pdf': case 'pdf':
...@@ -3265,6 +3267,8 @@ class statistics_helper { ...@@ -3265,6 +3267,8 @@ class statistics_helper {
// Creating the first worksheet // Creating the first worksheet
$this->sheet = $this->workbook->addWorksheet(utf8_decode('results-survey'.$surveyid)); $this->sheet = $this->workbook->addWorksheet(utf8_decode('results-survey'.$surveyid));
$this->xlsPercents = &$this->workbook->addFormat();
$this->xlsPercents->setNumFormat('0.00%');
$this->sheet->setInputEncoding('utf-8'); $this->sheet->setInputEncoding('utf-8');
$this->sheet->setColumn(0,20,20); $this->sheet->setColumn(0,20,20);
$separator="~|"; $separator="~|";
...@@ -3320,16 +3324,16 @@ class statistics_helper { ...@@ -3320,16 +3324,16 @@ class statistics_helper {
case "xls": case "xls":
$this->xlsRow = 0; $this->xlsRow = 0;
$this->sheet->write($this->xlsRow,0,$statlang->gT("Number of records in this query:",'unescaped')); $this->sheet->write($this->xlsRow,0,$statlang->gT("Number of records in this query:",'unescaped'));
$this->sheet->write($this->xlsRow,1,$results); $this->sheet->writeNumber($this->xlsRow,1,$results);
$this->xlsRow++; $this->xlsRow++;
$this->sheet->write($this->xlsRow,0,$statlang->gT("Total records in survey:",'unescaped')); $this->sheet->write($this->xlsRow,0,$statlang->gT("Total records in survey:",'unescaped'));
$this->sheet->write($this->xlsRow,1,$total); $this->sheet->writeNumber($this->xlsRow,1,$total);
if($total) if($total)
{ {
$this->xlsRow++; $this->xlsRow++;
$this->sheet->write($this->xlsRow,0,$statlang->gT("Percentage of total:",'unescaped')); $this->sheet->write($this->xlsRow,0,$statlang->gT("Percentage of total:",'unescaped'));
$this->sheet->write($this->xlsRow,1,$percent."%"); $this->sheet->writeNumber($this->xlsRow,1,$results/$total, $this->xlsPercents);
} }
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment