Files
Chamilo/vendor/ddeboer/data-import/src/Writer/ExcelWriter.php
2025-04-10 12:24:57 +02:00

118 lines
2.7 KiB
PHP

<?php
namespace Ddeboer\DataImport\Writer;
use Ddeboer\DataImport\Writer;
use PHPExcel;
use PHPExcel_IOFactory;
/**
* Writes to an Excel file
*
* @author David de Boer <david@ddeboer.nl>
*/
class ExcelWriter implements Writer
{
/**
* @var string
*/
protected $filename;
/**
* @var null|string
*/
protected $sheet;
/**
* @var string
*/
protected $type;
/**
* @var boolean
*/
protected $prependHeaderRow;
/**
* @var PHPExcel
*/
protected $excel;
/**
* @var integer
*/
protected $row = 1;
/**
* @param \SplFileObject $file File
* @param string $sheet Sheet title (optional)
* @param string $type Excel file type (defaults to Excel2007)
* @param boolean $prependHeaderRow
*/
public function __construct(\SplFileObject $file, $sheet = null, $type = 'Excel2007', $prependHeaderRow = false)
{
$this->filename = $file->getPathname();
$this->sheet = $sheet;
$this->type = $type;
$this->prependHeaderRow = $prependHeaderRow;
}
/**
* {@inheritdoc}
*/
public function prepare()
{
$reader = PHPExcel_IOFactory::createReader($this->type);
if ($reader->canRead($this->filename)) {
$this->excel = $reader->load($this->filename);
} else {
$this->excel = new PHPExcel();
if(null !== $this->sheet && !$this->excel->sheetNameExists($this->sheet))
{
$this->excel->removeSheetByIndex(0);
}
}
if (null !== $this->sheet) {
if (!$this->excel->sheetNameExists($this->sheet)) {
$this->excel->createSheet()->setTitle($this->sheet);
}
$this->excel->setActiveSheetIndexByName($this->sheet);
}
}
/**
* {@inheritdoc}
*/
public function writeItem(array $item)
{
$count = count($item);
if ($this->prependHeaderRow && 1 == $this->row) {
$headers = array_keys($item);
for ($i = 0; $i < $count; $i++) {
$this->excel->getActiveSheet()->setCellValueByColumnAndRow($i, $this->row, $headers[$i]);
}
$this->row++;
}
$values = array_values($item);
for ($i = 0; $i < $count; $i++) {
$this->excel->getActiveSheet()->setCellValueByColumnAndRow($i, $this->row, $values[$i]);
}
$this->row++;
}
/**
* {@inheritdoc}
*/
public function finish()
{
$writer = \PHPExcel_IOFactory::createWriter($this->excel, $this->type);
$writer->save($this->filename);
}
}