Migration vers phpspreadsheet et fix nom du demandeur

This commit is contained in:
lars 2019-05-01 17:24:18 +02:00
parent c671fda638
commit 05c0b9a1af
3 changed files with 92 additions and 24 deletions

View File

@ -149,7 +149,7 @@ die();
$query .= " AND UID=$userid"; $query .= " AND UID=$userid";
} }
if (!$result = $mysqli->query($query) ) { if (!$result = $mysqli->query($query) ) {
echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error; echo "Table read failed: (" . $mysqli->errno . ") " . $mysqli->error;
die("Argh"); die("Argh");
} }
@ -166,6 +166,8 @@ die();
header("location: accred_list"); header("location: accred_list");
die(); die();
} }
// Retrieve the name of the original requestor
$reqName = $row['name'];
} }
// instantiate a Zebra_Form object // instantiate a Zebra_Form object
$form = new Zebra_Form('form'); $form = new Zebra_Form('form');
@ -176,7 +178,7 @@ die();
$forWho = $_SESSION['name']; $forWho = $_SESSION['name'];
} }
else { else {
$ti = 'Commande par '.$_SESSION['name'] . ', créée le '.$row['created']; $ti = 'Commande par '.$reqName. ', créée le '.$row['created'];
$forWho = $ar['demande_pour']; $forWho = $ar['demande_pour'];
} }
if($isAdmin) { if($isAdmin) {

View File

@ -19,6 +19,9 @@
header("location: index?"); header("location: index?");
} }
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
require_once 'vendor/autoload.php'; require_once 'vendor/autoload.php';
define('TMP_FILES', "/tmp/"); // temp folder where it stores the files into. define('TMP_FILES', "/tmp/"); // temp folder where it stores the files into.
@ -34,15 +37,15 @@
if($_GET['o']=='excel') { if($_GET['o']=='excel') {
$objPHPExcel = new PHPExcel(); $spreadsheet = new Spreadsheet();
// Set properties // Set properties
$objPHPExcel->getProperties()->setCreator("Caribana festival"); $spreadsheet->getProperties()->setCreator("Caribana festival");
$objPHPExcel->getProperties()->setLastModifiedBy("Caribana festival"); $spreadsheet->getProperties()->setLastModifiedBy("Caribana festival");
$objPHPExcel->getProperties()->setTitle("Accréditations " . $cfg['year']); $spreadsheet->getProperties()->setTitle("Accréditations " . $cfg['year']);
$objPHPExcel->getProperties()->setSubject("Accréditations " . $cfg['year']); $spreadsheet->getProperties()->setSubject("Accréditations " . $cfg['year']);
$objPHPExcel->getProperties()->setDescription("Accréditations " . $cfg['year']); $spreadsheet->getProperties()->setDescription("Accréditations " . $cfg['year']);
$objPHPExcel->setActiveSheetIndex(0); $spreadsheet->setActiveSheetIndex(0);
$query = "select * from submissions"; $query = "select * from submissions";
$mysqli = new mysqli($cfg['host'], $cfg['user'],$cfg['pass'], $cfg['name']); $mysqli = new mysqli($cfg['host'], $cfg['user'],$cfg['pass'], $cfg['name']);
@ -101,7 +104,7 @@ $line = 1;
} }
if($line==1) { if($line==1) {
$keys = array_keys ( $header ); $keys = array_keys ( $header );
$objPHPExcel->getActiveSheet() $spreadsheet->getActiveSheet()
->fromArray( ->fromArray(
$keys, // The data to set $keys, // The data to set
NULL, // Array values with this value will not be set NULL, // Array values with this value will not be set
@ -111,7 +114,7 @@ $line = 1;
$line++; $line++;
} }
$objPHPExcel->getActiveSheet() $spreadsheet->getActiveSheet()
->fromArray( ->fromArray(
$fr, // The data to set $fr, // The data to set
NULL, // Array values with this value will not be set NULL, // Array values with this value will not be set
@ -124,9 +127,28 @@ $objPHPExcel->getActiveSheet()
} }
$objPHPExcel->getActiveSheet()->getStyle('1')->getFont()->setBold(true); $spreadsheet->getActiveSheet()->getStyle('1')->getFont()->setBold(true);
$objPHPExcel->getActiveSheet()->setTitle('Toutes accréditations'); $spreadsheet->getActiveSheet()->setTitle('Toutes demandes');
foreach (range('A','Z') as $col) {
$spreadsheet->getActiveSheet()->getColumnDimension($col)->setAutoSize(true);
}
foreach (range('A','E') as $col) {
$spreadsheet->getActiveSheet()->getColumnDimension('A'.$col)->setAutoSize(true);
}
// Add totals
//
$highestRow = $spreadsheet->getActiveSheet()->getHighestRow();
$coord = 'N' . ($highestRow+2);
$spreadsheet->getActiveSheet()->setCellValue($coord, 'TOTAL');
foreach(range('O','Z') as $col) {
$spreadsheet->getActiveSheet()->setCellValue($col.($highestRow+2), '=SUM('.$col.'2:'.$col.($highestRow).')');
}
// Do AA
$spreadsheet->getActiveSheet()->setCellValue('AA'.($highestRow+2), '=SUM(AA2:AA'.($highestRow).')');
// Format the total
$spreadsheet->getActiveSheet()->getStyle($coord.':AA'.($highestRow+2))->getFill()
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
->getStartColor()->setARGB('AAAAAAAA');
// ------ // ------
// Go again this time sorted by name so we can create a worksheet per requestor // Go again this time sorted by name so we can create a worksheet per requestor
@ -165,9 +187,27 @@ $line = 1;
} }
if($prevName!=$fr['name']) { if($prevName!=$fr['name']) {
$keys = array_keys ( $header ); $keys = array_keys ( $header );
// Create new workshet // Create new worksheet
$myWorkSheet = new PHPExcel_Worksheet($objPHPExcel, $fr['name']); if($prevSheet) {
$objPHPExcel->addSheet($myWorkSheet); // Add totals
// //
$highestRow = $prevSheet->getHighestRow();
$coord = 'N' . ($highestRow+2);
$prevSheet->setCellValue($coord, 'TOTAL');
foreach(range('O','Z') as $col) {
$prevSheet->setCellValue($col.($highestRow+2), '=SUM('.$col.'2:'.$col.($highestRow).')');
}
// Do AA
$prevSheet->setCellValue('AA'.($highestRow+2), '=SUM(AA2:AA'.($highestRow).')');
// Format the total
$prevSheet->getStyle($coord.':AA'.($highestRow+2))->getFill()
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
->getStartColor()->setARGB('BBBBBBBB');
}
$prevSheet = $spreadsheet->getActiveSheet();
$myWorkSheet = $spreadsheet->createSheet();
$myWorkSheet->setTitle($fr['name']);
$myWorkSheet $myWorkSheet
->fromArray( ->fromArray(
$keys, // The data to set $keys, // The data to set
@ -192,21 +232,44 @@ $line = 1;
} }
} }
foreach (range('A','Z') as $col) {
$myWorkSheet->getColumnDimension($col)->setAutoSize(true);
}
foreach (range('A','E') as $col) {
$spreadsheet->getActiveSheet()->getColumnDimension('A'.$col)->setAutoSize(true);
}
// Put totals on last sheet
// Add totals
// //
$highestRow = $spreadsheet->getActiveSheet()->getHighestRow();
$coord = 'N' . ($highestRow+2);
$spreadsheet->getActiveSheet()->setCellValue($coord, 'TOTAL');
foreach(range('O','Z') as $col) {
$spreadsheet->getActiveSheet()->setCellValue($col.($highestRow+2), '=SUM('.$col.'2:'.$col.($highestRow).')');
}
// Do AA
$spreadsheet->getActiveSheet()->setCellValue('AA'.($highestRow+2), '=SUM(AA2:AA'.($highestRow).')');
// Format the total
$spreadsheet->getActiveSheet()->getStyle($coord.':AA'.($highestRow+2))->getFill()
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
->getStartColor()->setARGB('AAAAAAAA');
$mysqli->close(); $mysqli->close();
// ------- // -------
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$filename = 'accred_list.xlsx'; $filename = 'accred_list.xlsx';
$objWriter->save($filename);
header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8'); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8');
header('Content-Length: ' . filesize($filename)); // header('Content-Length: ' . filesize($filename));
header('Content-Transfer-Encoding: binary'); header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate'); header('Cache-Control: must-revalidate');
header('Pragma: public'); header('Pragma: public');
$objWriter->save('php://output');
readfile($filename); $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
exit();
} }
?> ?>

View File

@ -54,6 +54,9 @@
$one[$key] = $val; $one[$key] = $val;
} }
$one['name'] = $row["name"]; $one['name'] = $row["name"];
if($one['demande_pour'] != $row["name"]) {
$one['name'] .= ' / ' . $one['demande_pour'];
}
$obj['data'][] = $one; $obj['data'][] = $one;
} }