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);
Настройка внешнего вида
-
Фиксирование строк и колонок
-
Автоширина колонок
-
Стилизация
$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)); // вставка нескольких строк
Указание формата
Эксель использует символы 0 и #
0 нужен для того чтоб дополнить дробную часть нулями до указанной длины
Например, шаблон #,00 говорит, что надо чтоб было два знака поля запятой. Если у меня меньше - добъет нулями.
А шаблон #,## говорит, что надо два знака после запятой. Но если в числе меньше - то и пофиг
Для указания необходимости включить разделитель тысяч, в доке прописано что надо прописать запятую,
обёрнутую в #, либо в 0, но судя по всему оборачивать надо пробел # #.
Если в целой части указать #, то число 0,12 будет отображаться как ,12
Есть подозрение, что . или , - это равнозначный символ, зависящий от локали.
В моём Экселе если попробовать заюзать точку вместо запятой - Эксель ругается, что некорректный формат
#,00100🠖100.000,1234🠖,12
0,0#10🠖10.010.2🠖10.210.22🠖10.2210.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