Developer 

While the spreadsheet is generated, the extension dispatches three PSR-14 events that let you shape the output without replacing the writer. All three live in the namespace \Calien\Xlsexport\Event\Export and are dispatched by \Calien\Xlsexport\Service\SpreadsheetWriteService. Register a listener with the \TYPO3\CMS\Core\Attribute\AsEventListener attribute.

AlternateFirstColumnInSheetEvent 

Dispatched once, before anything is written, to decide the first spreadsheet column the header and rows start in. The default is A. Use it to leave room for a logo or leading columns your own listener fills.

Mutable

yes, via setFirstColumn(string $firstColumn)

EXT:my_extension/Classes/EventListener/MoveExportStart.php
<?php

declare(strict_types=1);

namespace MyVendor\MyExtension\EventListener;

use Calien\Xlsexport\Event\Export\AlternateFirstColumnInSheetEvent;
use TYPO3\CMS\Core\Attribute\AsEventListener;

final class MoveExportStart
{
    #[AsEventListener]
    public function __invoke(AlternateFirstColumnInSheetEvent $event): void
    {
        $event->setFirstColumn('B');
    }
}
Copied!

AlternateHeaderLineEvent 

Dispatched before the header row is written, carrying the field labels from fieldLabels and the export key. Use it to translate, reorder or extend the column headers.

Mutable

yes, via setHeaderFieldLabels(array $headerFieldLabels)

Read

getHeaderFieldLabels(), getConfiguration() (the export key)

#[AsEventListener]
public function __invoke(AlternateHeaderLineEvent $event): void
{
    if ($event->getConfiguration() === 'orders') {
        $event->setHeaderFieldLabels(['#', 'Order number', 'Total']);
    }
}
Copied!

ManipulateRowEntryEvent 

Dispatched for every data row before it is written, carrying the raw row (as fetched from the database), the header labels and the export key. Use it to format values, resolve foreign keys to readable labels, or add computed columns.

Mutable

yes, via setRow(array $row)

Read

getRow(), getFieldLabels(), getConfigurationKey()

#[AsEventListener]
public function __invoke(ManipulateRowEntryEvent $event): void
{
    $row = $event->getRow();
    $row['created'] = date('Y-m-d', (int)($row['created'] ?? 0));
    $event->setRow($row);
}
Copied!