mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-13 03:26:26 +00:00
0d72d12044
Fix #4280, an issue with many problems; this is the last one (PR #4281 and PR #4677 dealt with other aspects of the problem). New releases of Excel allow representing TRUE/FALSE as a checked/unchecked checkbox. This requires a change to Styles, as expected. But Excel has implemented it in such a manner that changes are also required to Content_Types and workbook.xml.rels; and a new xml file propertyFeatureBag is also required. Seems like a lot of work for such a small change. A new property is added to Style, but only Xlsx Reader and Writer support it; no other format does.
138 lines
4.4 KiB
PHP
138 lines
4.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace PhpOffice\PhpSpreadsheetTests\Writer\Xlsx;
|
|
|
|
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
|
|
use PhpOffice\PhpSpreadsheet\Shared\File;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class CheckBoxStyleTest extends TestCase
|
|
{
|
|
private string $outputFile = '';
|
|
|
|
protected function tearDown(): void
|
|
{
|
|
if ($this->outputFile !== '') {
|
|
unlink($this->outputFile);
|
|
$this->outputFile = '';
|
|
}
|
|
}
|
|
|
|
public function testCheckBoxStyle(): void
|
|
{
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$sheet->setCellValue('A1', true);
|
|
$sheet->setCellValue('A2', false);
|
|
$sheet->setCellValue('A3', false); // no checkbox
|
|
$sheet->getStyle('A1')->setCheckBox(true);
|
|
$sheet->getStyle('A2')->setCheckBox(true);
|
|
|
|
$this->outputFile = File::temporaryFilename();
|
|
$writer = new XlsxWriter($spreadsheet);
|
|
$writer->save($this->outputFile);
|
|
$spreadsheet->disconnectWorksheets();
|
|
|
|
$reader = new XlsxReader();
|
|
$reloadedSpreadsheet = $reader->load($this->outputFile);
|
|
$spreadsheet->disconnectWorksheets();
|
|
|
|
$rsheet = $reloadedSpreadsheet->getActiveSheet();
|
|
self::assertTrue($rsheet->getStyle('A1')->getCheckBox());
|
|
self::assertTrue($rsheet->getStyle('A2')->getCheckBox());
|
|
self::assertFalse($rsheet->getStyle('A3')->getCheckBox());
|
|
$reloadedSpreadsheet->disconnectWorksheets();
|
|
|
|
$file = 'zip://';
|
|
$file .= $this->outputFile;
|
|
$file .= '#[Content_Types].xml';
|
|
$data = file_get_contents($file);
|
|
self::assertNotFalse($data);
|
|
self::assertStringContainsString(
|
|
'featurePropertyBag',
|
|
$data
|
|
);
|
|
|
|
$file = 'zip://';
|
|
$file .= $this->outputFile;
|
|
$file .= '#xl/_rels/workbook.xml.rels';
|
|
$data = file_get_contents($file);
|
|
self::assertNotFalse($data);
|
|
self::assertStringContainsString(
|
|
'featurePropertyBag',
|
|
$data
|
|
);
|
|
|
|
$file = 'zip://';
|
|
$file .= $this->outputFile;
|
|
$file .= '#xl/featurePropertyBag/featurePropertyBag.xml';
|
|
$data = file_get_contents($file);
|
|
self::assertNotFalse($data);
|
|
self::assertStringContainsString(
|
|
'Checkbox',
|
|
$data
|
|
);
|
|
}
|
|
|
|
public function testCheckBoxStyleDiskCache(): void
|
|
{
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$sheet->setCellValue('A1', true);
|
|
$sheet->setCellValue('A2', false);
|
|
$sheet->setCellValue('A3', false); // no checkbox
|
|
$sheet->getStyle('A1')->setCheckBox(true);
|
|
$sheet->getStyle('A2')->setCheckBox(true);
|
|
|
|
$this->outputFile = File::temporaryFilename();
|
|
$writer = new XlsxWriter($spreadsheet);
|
|
$writer->setUseDiskCaching(true, sys_get_temp_dir());
|
|
$writer->save($this->outputFile);
|
|
$spreadsheet->disconnectWorksheets();
|
|
|
|
$reader = new XlsxReader();
|
|
$reloadedSpreadsheet = $reader->load($this->outputFile);
|
|
$spreadsheet->disconnectWorksheets();
|
|
|
|
$rsheet = $reloadedSpreadsheet->getActiveSheet();
|
|
self::assertTrue($rsheet->getStyle('A1')->getCheckBox());
|
|
self::assertTrue($rsheet->getStyle('A2')->getCheckBox());
|
|
self::assertFalse($rsheet->getStyle('A3')->getCheckBox());
|
|
$reloadedSpreadsheet->disconnectWorksheets();
|
|
|
|
$file = 'zip://';
|
|
$file .= $this->outputFile;
|
|
$file .= '#[Content_Types].xml';
|
|
$data = file_get_contents($file);
|
|
self::assertNotFalse($data);
|
|
self::assertStringContainsString(
|
|
'featurePropertyBag',
|
|
$data
|
|
);
|
|
|
|
$file = 'zip://';
|
|
$file .= $this->outputFile;
|
|
$file .= '#xl/_rels/workbook.xml.rels';
|
|
$data = file_get_contents($file);
|
|
self::assertNotFalse($data);
|
|
self::assertStringContainsString(
|
|
'featurePropertyBag',
|
|
$data
|
|
);
|
|
|
|
$file = 'zip://';
|
|
$file .= $this->outputFile;
|
|
$file .= '#xl/featurePropertyBag/featurePropertyBag.xml';
|
|
$data = file_get_contents($file);
|
|
self::assertNotFalse($data);
|
|
self::assertStringContainsString(
|
|
'Checkbox',
|
|
$data
|
|
);
|
|
}
|
|
}
|