Installation Add the package via Composer:
composer require agence-gw/phpexcel
Ensure php-xml and php-zip extensions are enabled in your php.ini.
First Use Case: Reading a Spreadsheet
use PhpOffice\PhpSpreadsheet\IOFactory;
$spreadsheet = IOFactory::load('path/to/file.xlsx');
$worksheet = $spreadsheet->getActiveSheet();
$data = $worksheet->toArray();
IOFactory (for reading/writing files)Spreadsheet (main container)Worksheet (individual sheets)$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load('large_file.xlsx');
foreach ($spreadsheet->getActiveSheet()->getRowIterator() as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
$data[] = $cellIterator->current()->getValue();
}
$reader = IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(true); // Optimize for read-only
$spreadsheet = $reader->load('large_file.xlsx');
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->createSheet();
$sheet->setTitle('DynamicSheet');
$sheet->fromArray($data, null, 'A1');
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('output.xlsx');
$style = new Style();
$style->getFont()->setBold(true);
$spreadsheet->getActiveSheet()->getStyle('A1')->applyFromArray($style->getConditionalStyles());
$this->app->bind('phpspreadsheet', function () {
return new IOFactory();
});
// Export to Excel
return Excel::download(function () use ($data) {
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray($data);
return $spreadsheet;
}, 'export.xlsx');
(Note: Use maatwebsite/excel for Laravel-specific helpers, but this package works standalone.)$spreadsheet = IOFactory::load('template.xlsx');
$newSheet = IOFactory::load('data.xlsx')->getActiveSheet();
$spreadsheet->addSheet($newSheet, 'ImportedData');
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('merged.xlsx');
Memory Limits:
memory_limit. Use setReadDataOnly(true) or chunk processing.memory_limit in php.ini or use a streaming approach.Time Zones and Dates:
date_default_timezone_set('UTC');
Formula Evaluation:
setReadDataOnly(true) to skip evaluation during reads.File Locking:
Deprecated Methods:
PHPExcel_ namespace) are deprecated. Prefer PhpOffice\PhpSpreadsheet\ namespace.error_reporting(E_ALL);
ini_set('display_errors', 1);
isReadOnly() to check if a file is corrupted:
$reader = IOFactory::createReader('Xlsx');
if (!$reader->canRead('suspect.xlsx')) {
throw new Exception('File is corrupted or unsupported.');
}
app/Config/spreadsheet.php (if using Laravel):
'default' => [
'font' => ['name' => 'Arial', 'size' => 10],
],
Writer\Xlsx for custom formats:
class CustomXlsxWriter extends Writer\Xlsx {
public function save($filename) {
// Custom logic
parent::save($filename);
}
}
getCalculationEngine() to handle custom data:
$spreadsheet->getCalculationEngine()->setCreateRangesFromCellReferences(true);
PhpOffice\PhpSpreadsheet\Event\AfterCalculate for post-processing:
$spreadsheet->getCalculationEngine()->addListener(
new AfterCalculateListener($spreadsheet)
);
$spreadsheet->getCalculationEngine()->registerFunction('MYFUNC', 'MyCustomFunction');
How can I help you explore Laravel packages today?