Installation
composer require phpoffice/phpexcel
(Note: Due to archival, consider alternatives like phpoffice/phpspreadsheet for new projects.)
First Usage
use PhpOffice\PhpExcel\IOFactory;
$inputFileName = 'template.xlsx';
$objPHPExcel = IOFactory::load($inputFileName);
// Save modified file
$objWriter = IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('modified.xlsx');
Key Files to Explore
src/PhpExcel/ – Core classes (e.g., IOFactory, Worksheet, Cell).Tests/ – Real-world examples (e.g., IOFactoryTest.php for file handling).Reading Excel Files
$excel = IOFactory::load('data.xlsx');
$sheet = $excel->getActiveSheet();
foreach ($sheet->getRowIterator() as $row) {
$cell = $row->getCellIterator()->current();
echo $cell->getValue();
}
Writing Data
$excel = new \PhpOffice\PhpExcel();
$sheet = $excel->getActiveSheet();
$sheet->setCellValue('A1', 'Hello, PhpExcel!');
$writer = IOFactory::createWriter($excel, 'Xlsx');
$writer->save('output.xlsx');
Styling & Formulas
$sheet->getStyle('A1')->getFont()->setBold(true);
$sheet->setCellValue('B1', '=SUM(A1:A10)');
Merging Cells & Images
$sheet->mergeCells('A1:D1');
$sheet->addImage('logo.png', 'A2');
Storage facade to handle file paths.
use Illuminate\Support\Facades\Storage;
$path = Storage::path('excel/templates/template.xlsx');
ExcelJob::dispatch($filePath)->onQueue('excel');
Memory Limits
memory_limit. Use chunked processing or phpspreadsheet for big data.memory_limit in php.ini or process files in batches.Deprecated Methods
PhpExcel is archived; avoid setActiveSheetIndex() (use setActiveSheet()).Encoding Issues
$writer->setUsePrePhp54Constructor(true);
$writer->setPreCalculateFormulas(false);
Formula Errors
../) may break. Use absolute references (e.g., $A$1).config/excel.php (if custom configured).Custom Writers
Override PhpOffice\PhpExcel\Writer\AbstractWriter for proprietary formats.
class CustomWriter extends AbstractWriter {
protected function writeData() { ... }
}
Event Listeners
Hook into PhpExcel\Event\BeforeSave to pre-process data:
$excel->addListener(new class implements \PhpOffice\PhpExcel\Event\Listener\BeforeSave {
public function beforeSave(\PhpOffice\PhpExcel\Event\BeforeSave $event) {
// Modify $event->getWorksheet() here
}
});
Laravel Service Provider
Bind IOFactory to the container for dependency injection:
$this->app->bind('excel', function () {
return new \PhpOffice\PhpExcel\IOFactory();
});
How can I help you explore Laravel packages today?