WithColumnFormattingTest.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace Maatwebsite\Excel\Tests\Concerns;
  3. use Carbon\Carbon;
  4. use Composer\InstalledVersions;
  5. use Composer\Semver\VersionParser;
  6. use Illuminate\Support\Collection;
  7. use Maatwebsite\Excel\Concerns\Exportable;
  8. use Maatwebsite\Excel\Concerns\FromCollection;
  9. use Maatwebsite\Excel\Concerns\WithColumnFormatting;
  10. use Maatwebsite\Excel\Concerns\WithMapping;
  11. use Maatwebsite\Excel\Tests\TestCase;
  12. use PhpOffice\PhpSpreadsheet\Shared\Date;
  13. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  14. class WithColumnFormattingTest extends TestCase
  15. {
  16. /**
  17. * @test
  18. */
  19. public function can_export_with_column_formatting()
  20. {
  21. $export = new class() implements FromCollection, WithMapping, WithColumnFormatting
  22. {
  23. use Exportable;
  24. /**
  25. * @return Collection
  26. */
  27. public function collection()
  28. {
  29. return collect([
  30. [Carbon::createFromDate(2018, 3, 6)],
  31. [Carbon::createFromDate(2018, 3, 7)],
  32. [Carbon::createFromDate(2018, 3, 8)],
  33. [Carbon::createFromDate(2021, 12, 6), 100],
  34. ]);
  35. }
  36. /**
  37. * @param mixed $row
  38. * @return array
  39. */
  40. public function map($row): array
  41. {
  42. return [
  43. Date::dateTimeToExcel($row[0]),
  44. isset($row[1]) ? $row[1] : null,
  45. ];
  46. }
  47. /**
  48. * @return array
  49. */
  50. public function columnFormats(): array
  51. {
  52. return [
  53. 'A' => NumberFormat::FORMAT_DATE_DDMMYYYY,
  54. 'B4:B4' => NumberFormat::FORMAT_CURRENCY_EUR,
  55. ];
  56. }
  57. };
  58. $response = $export->store('with-column-formatting-store.xlsx');
  59. $this->assertTrue($response);
  60. $actual = $this->readAsArray(__DIR__ . '/../Data/Disks/Local/with-column-formatting-store.xlsx', 'Xlsx');
  61. $legacyPhpSpreadsheet = !InstalledVersions::satisfies(new VersionParser, 'phpoffice/phpspreadsheet', '^1.28');
  62. $expected = [
  63. ['06/03/2018', null],
  64. ['07/03/2018', null],
  65. ['08/03/2018', null],
  66. ['06/12/2021', $legacyPhpSpreadsheet ? '100 €' : '100.00 €'],
  67. ];
  68. $this->assertEquals($expected, $actual);
  69. }
  70. }