| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- <?php
- namespace PhpOffice\PhpSpreadsheetTests\Writer\Csv;
- use PhpOffice\PhpSpreadsheet\Reader\Csv as CsvReader;
- use PhpOffice\PhpSpreadsheet\Shared\File;
- use PhpOffice\PhpSpreadsheet\Spreadsheet;
- use PhpOffice\PhpSpreadsheet\Writer\Csv as CsvWriter;
- use PhpOffice\PhpSpreadsheetTests\Functional;
- class CsvExcelCompatibilityTest extends Functional\AbstractFunctional
- {
- // Excel seems to have changed with how they handle this.
- // In particular, it does not recognize UTF-8 non-ASCII characters
- // if a file is written with ExcelCompatibility on.
- // The initial 'sep=;' line seems to confuse it, even though
- // it has a BOM. The Unix "file" command also indicates a difference
- // when the sep line is or is not included:
- // UTF-8 Unicode (with BOM) text, with CRLF line terminators
- // vs CSV text (without sep line, with or without BOM)
- // So, this test has no UTF-8 yet while more research is conducted.
- public function testExcelCompatibility(): void
- {
- $spreadsheet = new Spreadsheet();
- $sheet = $spreadsheet->getActiveSheet();
- $sheet->setCellValue('A1', '1');
- $sheet->setCellValue('B1', '2');
- $sheet->setCellValue('C1', '3');
- $sheet->setCellValue('A2', '4');
- $sheet->setCellValue('B2', '5');
- $sheet->setCellValue('C2', '6');
- $writer = new CsvWriter($spreadsheet);
- $writer->setExcelCompatibility(true);
- self::assertSame('', $writer->getOutputEncoding());
- $filename = File::temporaryFilename();
- $writer->save($filename);
- $reader = new CsvReader();
- $spreadsheet2 = $reader->load($filename);
- $contents = file_get_contents($filename);
- unlink($filename);
- self::assertEquals(1, $spreadsheet2->getActiveSheet()->getCell('A1')->getValue());
- self::assertEquals(6, $spreadsheet2->getActiveSheet()->getCell('C2')->getValue());
- self::assertStringContainsString(CsvReader::UTF8_BOM, $contents);
- self::assertStringContainsString("\r\n", $contents);
- self::assertStringContainsString('sep=;', $contents);
- self::assertStringContainsString('"1";"2";"3"', $contents);
- self::assertStringContainsString('"4";"5";"6"', $contents);
- }
- }
|