Перейти к содержанию

PhpSpreadsheet

Указание координат

use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\Cell\CellAddress;

// Получение координаты из индексов колонки и строки
CellAddress::fromColumnAndRow(columnId: 3, rowId: 10); // => 'C10'

// Получение буквенного обозначения колонки по индексу
Coordinate::stringFromColumnIndex(colIndex: 5); // => 'E'

Прописывание значений

$sheet->getCell('A1')->setValue('Значение для ячейки');
$sheet->setCellValueByColumnAndRow('A', 1, 'Значение для ячейки');
// прописывание значения с установкой типа ячейки
$sheet->getCell('A1')->setValueExplicit('21', \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_NUMERIC);
$sheet->setCellValueExplicit('A1', '21', \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_NUMERIC);
$sheet->setCellValueExplicitByColumnAndRow('A', 1, '21', \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_NUMERIC);

Настройка внешнего вида

  • Фиксирование строк и колонок

    $sheet->freezePane('B2');
    

  • Автоширина колонок

    $sheet->getColumnDimension('A')->setAutoSize(true);
    

  • Стилизация

    $styles = [
        'font'      => ['bold' => true],
        'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER]
    ];
    $sheet->getStyle('A1:F1')->applyFromArray($headStyles);
    

    • Поля можно посмотреть тут: PhpOffice\PhpSpreadsheet\Style\Style::applyFromArray()

Копирование стиля через вставку строк

Для вставки строк есть метод insertNewRowBefore($before, $numberOfRows). Метод вставляет одну строку, либо указанное количество ($numberOfRows) строк перед указанной строкой с копированием стилей.

Важно: стили копируются не с той строки, которая указана в $before, а с предыдущей. Это значит, что если например необходимо скопировать 3-ю строку с сохранением стилей, то в $before надо указать 4-ю строку:

$sheet->insertNewRowBefore(4);  // вставка одной строки
$sheet->insertNewRowBefore(4, count($users));   // вставка нескольких строк
После 3-ей строки будут вставлены новые строки. Эти строки отнаследуют стиль ячеек из 3 строки

Указание формата

Эксель использует символы 0 и # 0 нужен для того чтоб дополнить дробную часть нулями до указанной длины Например, шаблон #,00 говорит, что надо чтоб было два знака поля запятой. Если у меня меньше - добъет нулями. А шаблон #,## говорит, что надо два знака после запятой. Но если в числе меньше - то и пофиг

Для указания необходимости включить разделитель тысяч, в доке прописано что надо прописать запятую, обёрнутую в #, либо в 0, но судя по всему оборачивать надо пробел # #.

Если в целой части указать #, то число 0,12 будет отображаться как ,12

Есть подозрение, что . или , - это равнозначный символ, зависящий от локали. В моём Экселе если попробовать заюзать точку вместо запятой - Эксель ругается, что некорректный формат

  • #,00
    • 100 🠖 100.00
    • 0,1234 🠖 ,12
  • 0,0#
    • 10 🠖 10.0
    • 10.2 🠖 10.2
    • 10.22 🠖 10.22
    • 10.222 🠖 10.22

Такую запись # ##,0# можно образно разбить на две:

  • # # - включение разбиения на разряды
  • #,0# - отображение числа так, чтоб первый символ после запятой был всегда, а второй как получится

0.12 0.0# ,12 0.12 #.0# 0,12

Ссылки

  • https://support.microsoft.com/en-us/office/review-guidelines-for-customizing-a-number-format-c0a1d1fa-d3f4-4018-96b7-9c9354dd99f5
  • https://support.microsoft.com/ru-ru/office/%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8-%D0%BF%D0%BE-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B5-%D1%87%D0%B8%D1%81%D0%BB%D0%BE%D0%B2%D1%8B%D1%85-%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%BE%D0%B2-c0a1d1fa-d3f4-4018-96b7-9c9354dd99f5