Dorokhov.codes

PhpSpreadsheet

Reading a spreadsheet

use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;

$spreadsheet = IOFactory::load( $file_path );
$this->worksheet = $spreadsheet->getActiveSheet();

// Get the highest worksheet column index ("A", "B", "C", etc).
$highest_column = $this->worksheet->getHighestColumn();

// Convert the highest column index to a numerical value (e.g., 'A' => 1, 'B' => 2, etc.)
$highest_column_index = Coordinate::columnIndexFromString($highest_column);

// Get first row:
for ($col = 1; $col <= $highest_column_index; $col++) {
    $cell_value = $this->worksheet->getCell([$col, 1]);
}

Creating a spreadsheet

$spreadsheet = new Spreadsheet();

$sheet = $spreadsheet->getActiveSheet();

$i = 1;

$sheet->setCellValue( "A$i", 'Transaction ID' );
$sheet->setCellValue( "B$i", 'Email' );
$sheet->setCellValue( "C$i", 'Country' );
$sheet->setCellValue( "D$i", 'Company name' );
$sheet->setCellValue( "E$i", 'Company address' );
$sheet->setCellValue( "F$i", 'Company VAT address' );
$sheet->setCellValue( "G$i", 'Amount' );
$sheet->setCellValue( "H$i", 'Invoice number' );
$sheet->setCellValue( "I$i", 'Status' );
$sheet->setCellValue( "J$i", 'Date' );
$sheet->setCellValue( "K$i", 'Expires On' );

$sheet->getStyle('A1:K1')->applyFromArray([
    'font' => [
        'bold' => true,
        'size' => 10,
        'color' => ['rgb' => 'ffffff'],
    ],
    'alignment' => [
        'horizontal' => Alignment::HORIZONTAL_CENTER,
        'vertical' => Alignment::VERTICAL_CENTER,
    ],
    'fill' => [
        'fillType' => Fill::FILL_SOLID,
        'color' => ['rgb' => '134f5c'],
    ],
]);

$spreadsheet->getDefaultStyle()->applyFromArray([
    'font' => [
        'size' => 10,
    ]
]);

foreach ( $this->report as $row ) {

    $i++;

    $sheet->setCellValue( "A$i", $row[ 'id' ] );
    $sheet->setCellValue( "B$i", $row[ 'email' ] );
    $sheet->setCellValue( "C$i", $row[ 'country' ] );
    $sheet->setCellValue( "D$i", $row[ 'company_name' ] );
    $sheet->setCellValue( "E$i", $row[ 'company_address' ] );
    $sheet->setCellValue( "F$i", $row[ 'company_vat_number' ] );
    $sheet->setCellValue( "G$i", $row[ 'amount' ] );
    $sheet->setCellValue( "H$i", '#' .$row[ 'invoice_number' ] );
    $sheet->setCellValue( "I$i", $row[ 'status' ] );
    $sheet->setCellValue( "J$i", $row[ 'date' ] );
    $sheet->setCellValue( "K$i", $row[ 'expires' ] );

    if ( $row[ 'status' ] == 'Refunded' ) {
        $sheet->getStyle("A$i:" . $sheet->getHighestColumn() . $i)->applyFromArray([
            'fill' => [
                'fillType' => Fill::FILL_SOLID,
                'startColor' => [
                    'argb' => 'FFDADA', // Red color.
                ],
            ],
        ]);
    }

}

$sheet->getStyle('F')->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_00);

$sheet->getColumnDimension('A')->setAutoSize(true);
$sheet->getColumnDimension('B')->setAutoSize(true);
$sheet->getColumnDimension('C')->setAutoSize(true);
$sheet->getColumnDimension('D')->setWidth(30);
$sheet->getColumnDimension('E')->setWidth(30);
$sheet->getColumnDimension('F')->setAutoSize(true);
$sheet->getColumnDimension('G')->setAutoSize(true);
$sheet->getColumnDimension('H')->setAutoSize(true);
$sheet->getColumnDimension('I')->setAutoSize(true);
$sheet->getColumnDimension('J')->setAutoSize(true);
$sheet->getColumnDimension('K')->setAutoSize(true);

$this->writer = new Xlsx( $spreadsheet );

$temp_path = sys_get_temp_dir() . '/' . uniqid() . '.xlsx';

$this->writer->save( $temp_path );