Devtoid

PhpSpreadsheet

Шпаргалка

use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

// Открыть файл
$reader = IOFactory::createReader("Xlsx");
$spreadsheet = $reader->load('file.xlsx');
$sheet = $spreadsheet->getActiveSheet();

// Обход всех строк и ячеек
$highestRow = $sheet->getHighestRow();
$highestCol = $sheet->getHighestColumn();
$highestColIndex = Coordinate::columnIndexFromString($highestCol);
for ($row = 1; $row <= $highestRow; $row++) {
    for ($col = 1; $col <= $highestColIndex; $col++) {
        $cellValue = $sheet->getCellByColumnAndRow($col, $row)->getValue();
        echo "Значение ячейки {$col}{$row}: {$cellValue}\n";
    }
}

// Создать лист и задать отступы
$oSpreadsheet = new Spreadsheet();
$sheet = $oSpreadsheet->getActiveSheet();
$sheet->getPageMargins()
    ->setLeft(0.2)
    ->setRight(0.2)
    ->setTop(0.2)
    ->setBottom(0.2);

// Задать ширину столбца
$sheet->getColumnDimension('A')->setWidth('18');

// Задать высоту строки
$sheet->getRowDimension(5)->setRowHeight($item['height']);

// Объединить ячейки
$sheet->mergeCells('A1:B3');

// Вставить текст в ячейку
$sheet
    ->setCellValue('A10', 'Данные пользователя');
    
// Рамка, обводка для разных диапазонов
    $styleArray = [
        'borders' => [
            'allBorders' => [
                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
                'color' => ['argb' => '000000'],
            ],
        ],
    ];

$sheet->getStyle('A3:B4')->applyFromArray($styleArray);
$sheet->getStyle('D3:E4')->applyFromArray($styleArray);

// Рамка обводка для одного диапазона
    $sheet->getStyle('A2:E8')
        ->getBorders()
        ->getOutline()
        ->setBorderStyle(Border::BORDER_THICK)
        ->setColor(new Color('000000'));

// Отступ ячеек
$sheet->getStyle('A3:A6')->getAlignment()->setIndent(1);

// Сделать жирными
$sheet->getStyle('A22:A27')->getFont()->setBold(true);

// Перенос текста для ячейки
$sheet->getCell('A12')->getStyle()->getAlignment()->setWrapText(true);

// Выравнивание по центру
 $sheet->getCell('A13')->getStyle()
     ->getAlignment()
     ->setHorizontal('center');

// Задание шрифта
$sheet->getCell('A15')->getStyle()
    ->getFont()
    ->setName('Arial')
    ->setSize(16);

// Вставка html кода в ячейку
$wizard = new \PhpOffice\PhpSpreadsheet\Helper\Html();
$richText = $wizard->toRichTextObject('<b>Привет</b><br><i>Пока</i>');
$sheet->setCellValue('A13',$richText);

// Автоматическая ширина для колонок
foreach(range('A','M') as $columnID) {
    $sheet
        ->getColumnDimension($columnID)
        ->setAutoSize(true);
}

// Отдать файл на скачивание в браузер
$oWriter = IOFactory::createWriter($oSpreadsheet, 'Xlsx');
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment;filename=\"filename.xlsx\"");
header("Cache-Control: max-age=0");
$oWriter->save('php://output');

// Cохранить на диск
$excel = new Xlsx($spreadsheet);
$excel->save('file.xlsx');
// Или
$oWriter = IOFactory::createWriter($oSpreadsheet, 'Xlsx');
$oWriter->save('file.xlsx');