ldc-groupe/content/plugins/advanced-cf7-db/admin/class/PHPExcel.php
Vincent BRIDIER 134507db43 - Backup DEV
- Add DotEnv
- Fix Bato
- Etc..
2020-05-04 15:59:02 +02:00

157 lines
No EOL
5.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
require(dirname(__FILE__) . '/PHPExcel_Library.php');
class PHPExcel extends PHPExcelBase {
private $_type = null;
private $_url = null;
private $_types = [ 'xlsx' => 'Excel2007', 'xls' => 'Excel5' ];
private $_path = null;
private $_filename = null;
private $_extension = null;
private $_cells = [ 'A', 'B', 'C', 'D', 'E', 'F' ,'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N' ,'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ];
public function setPropertie($properties = array()){
if (!empty($properties)) {
foreach ($properties as $propertie => $value) {
exec('$this->' . ucfirst($propertie) . '(' . $value . ')');
}
}
}
public function setCells($cells = array()){
if (!empty($cells)) {
foreach ($cells as $sheet => $cell) {
if(!empty($cell['items'])){
if ($sheet > 0){
$this->createSheet();
}
$sheet = $this->setActiveSheetIndex($sheet);
if(!empty($cell['header'])){
foreach ($cell['header'] as $col => $header) {
$sheet->setCellValue($this->getColumn($col) . '1', $header);
}
}
foreach ($cell['items'] as $row => $items) {
foreach ($items as $col => $text) {
$record = (($row + 1) + 1);
$sheet->setCellValue($this->getColumn($col).$record, $text);
}
}
$this->getActiveSheet()->setTitle(!empty($cell['title']) ? $cell['title'] : 'Sheet');
}
}
}
}
public function Output($obj = array(), $file = null, $format = 'S'){
if (!empty($this->getFile($file))) {
$writer = PHPExcel_IOFactory::createWriter($obj, $this->_type); // Excel2007 (xlsx), Excel5 (xls)
if ($format == 'S') {
$writer->save($this->_path);
if ($this->_extension == 'xlsx') {
header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8');
} else {
header('Content-type: application/vnd.ms-excel; charset=utf-8');
}
header('Content-Disposition: attachment; filename=' . $this->_filename . '.' . $this->_extension);
readfile($this->_path);
} else if ($format == 'D') {
if ($this->_extension == 'xlsx') {
header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8');
} else {
header('Content-type: application/vnd.ms-excel; charset=utf-8');
}
header('Content-Disposition: attachment; filename=' . $this->_filename . '.' . $this->_extension);
$writer->save('php://output');
} else if ($format == 'L') {
$writer->save($this->_path);
return '<p>Download Files: <a href="' . $this->_url . '" target="_blank">' . $this->_url . '</a></p>';
}
}
}
private function getColumn($col){
$level = 0; // A
if ( $col <= 25 ) {
return $this->_cells[$col];
}
if ( $col > 25 && $col <= 50) {
$col = $col - 26;
return $this->_cells[$level] . $this->_cells[$col];
}
}
private function getFile($file = nul){
$rootDir = Yii::getAlias('@webroot') . '/';
$files = explode('/', $file);
$current = (count($files)-1);
if (!empty($files[$current])) {
list($this->_filename, $this->_extension) = explode('.', $files[$current]);
$this->_type = $this->_types[$this->_extension];
$this->_path = $rootDir . $file;
$this->_url = Yii::$app->urlManager->createAbsoluteUrl('/') . $file;
return true;
}
return false;
}
/**
* This function will return the excel cell number when passing the column and row number
* @param string $row The row number of the excel sheet
* @param string $col The column number of the excel sheet
* @return string The excel file's cell number
*/
public function getCellNo($row = '', $col = ''){
if($row === '' || $col === ''){
return 'A1';
}
$cells = [ 'A', 'B', 'C', 'D', 'E', 'F' ,'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N' ,'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ];
if( $col <= 25 ) {
return $cells[$col].$row;
}
if ( $col > 25 ) {
$left = intval($col / 25) - 1;
$right = intval($col % 25) - 1;
if($right < 0){
$right = 0;
}
return $cells[$left].$cells[$right].$row;
}
}
/**
* Transmits the proper headers to cause a download to occur and to identify the file properly
* @return nothing
*/
public function headers($filename = '') {
if($filename === ''){
$filename = 'Sample';
}
$result = strtolower(trim($filename));
$result = str_replace("'", '', $result);
$result = preg_replace('#[^a-z0-9_]+#', '-', $result);
$result = preg_replace('#\-{2,}#', '-', $result);
$file = preg_replace('#(^\-+|\-+$)#D', '', $result);
// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$file.'.xls"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
}
}