| 2019-02-02 12:34:00 |
3 |
x |
$1,234.00 |
';
$spreadsheet = HtmlHelper::loadHtmlStringIntoSpreadsheet($html);
$sheet = $spreadsheet->getSheet(0);
self::assertSame('mmm-yy', $sheet->getStyle('A1')->getNumberFormat()->getFormatCode());
self::assertSame('2019-02-02 12:34:00', $sheet->getCell('A1')->getFormattedValue(), 'field is string not number so not formatted');
self::assertSame('#.000', $sheet->getStyle('B1')->getNumberFormat()->getFormatCode());
self::assertSame('3.000', $sheet->getCell('B1')->getFormattedValue(), 'format applied to numeric value');
self::assertSame('#.000', $sheet->getStyle('C1')->getNumberFormat()->getFormatCode());
self::assertSame('x', $sheet->getCell('C1')->getFormattedValue(), 'format not applied to non-numeric value');
self::assertSame('$#,###.00', $sheet->getStyle('D1')->getNumberFormat()->getFormatCode());
self::assertSame('$1,234.00', $sheet->getCell('D1')->getFormattedValue());
self::assertSame(1234, $sheet->getCell('D1')->getValue());
$spreadsheet->disconnectWorksheets();
}
public static function testPreserve(): void
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$payload = '
';
$formatCode = '@';
$sheet->setCellValue('A1', $payload);
$sheet->getStyle('A1')
->getNumberFormat()
->setFormatCode($formatCode);
$sheet->setCellValue('A2', 3.00);
$sheet->setCellValue('A3', 3.00);
$sheet->getStyle('A3')
->getNumberFormat()
->setFormatCode('0.00');
$formatCode = '@ <"items">';
$sheet->setCellValue('B1', $payload);
$sheet->getStyle('B1')
->getNumberFormat()
->setFormatCode($formatCode);
$sheet->setCellValue('B2', 1234);
$sheet->getStyle('B2')
->getNumberFormat()
->setFormatCode('$#,###.00');
$sheet->setCellValue('B3', '=2*5');
$sheet->getStyle('B3')
->getNumberFormat()
->setFormatCode('0.0');
$writer = new HtmlWriter($spreadsheet);
$writer->setPreserveFormatAndValue(true)
->setDataFormula(true);
$html = $writer->generateHtmlAll();
$spreadsheet->disconnectWorksheets();
$expected = [
'A1' => '<img src=x onerror=alert(document.domain)> | ',
'B1' => '<img src=x onerror=alert(document.domain)> <items> | ',
'A2' => '3 | ',
'B2' => '$1,234.00 | ',
'C1' => '3.00 | ',
'C2' => '10.0 | ',
];
foreach ($expected as $key => $value) {
self::assertStringContainsString($value, $html, "Cell $key");
}
$spreadsheet2 = HtmlHelper::loadHtmlStringIntoSpreadsheet($html);
$sheet2 = $spreadsheet2->getActiveSheet();
self::assertSame('@', $sheet2->getStyle('A1')->getNumberFormat()->getFormatCode());
self::assertSame($payload, $sheet2->getCell('A1')->getValue());
self::assertSame($payload, $sheet2->getCell('A1')->getFormattedValue());
self::assertSame('@ <"items">', $sheet2->getStyle('B1')->getNumberFormat()->getFormatCode());
self::assertSame($payload, $sheet2->getCell('B1')->getValue());
self::assertSame($payload . ' ', $sheet2->getCell('B1')->getFormattedValue());
self::assertSame('General', $sheet2->getStyle('A2')->getNumberFormat()->getFormatCode());
self::assertSame(3, $sheet2->getCell('A2')->getValue());
self::assertSame('3', $sheet2->getCell('A2')->getFormattedValue());
self::assertSame('$#,###.00', $sheet2->getStyle('B2')->getNumberFormat()->getFormatCode());
self::assertSame(1234, $sheet2->getCell('B2')->getValue());
self::assertSame('$1,234.00', $sheet2->getCell('B2')->getFormattedValue());
self::assertSame('0.00', $sheet2->getStyle('A3')->getNumberFormat()->getFormatCode());
self::assertSame(3, $sheet2->getCell('A3')->getValue());
self::assertSame('3.00', $sheet2->getCell('A3')->getFormattedValue());
self::assertSame('0.0', $sheet2->getStyle('B3')->getNumberFormat()->getFormatCode());
self::assertSame('=2*5', $sheet2->getCell('B3')->getValue());
self::assertSame('10.0', $sheet2->getCell('B3')->getFormattedValue());
$spreadsheet2->disconnectWorksheets();
}
public static function testNoPreserve(): void
{
// Same as above, without preserveFormatAndValue
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$payload = '
';
$formatCode = '@';
$sheet->setCellValue('A1', $payload);
$sheet->getStyle('A1')
->getNumberFormat()
->setFormatCode($formatCode);
$sheet->setCellValue('A2', 3.00);
$sheet->setCellValue('A3', 3.00);
$sheet->getStyle('A3')
->getNumberFormat()
->setFormatCode('0.00');
$formatCode = '@ <"items">';
$sheet->setCellValue('B1', $payload);
$sheet->getStyle('B1')
->getNumberFormat()
->setFormatCode($formatCode);
$sheet->setCellValue('B2', 1234);
$sheet->getStyle('B2')
->getNumberFormat()
->setFormatCode('$#,###.00');
$sheet->setCellValue('B3', '=2*5');
$sheet->getStyle('B3')
->getNumberFormat()
->setFormatCode('0.0');
$writer = new HtmlWriter($spreadsheet);
$html = $writer->generateHtmlAll();
$spreadsheet->disconnectWorksheets();
$expected = [
'A1' => '<img src=x onerror=alert(document.domain)> | ',
'B1' => '<img src=x onerror=alert(document.domain)> <items> | ',
'A2' => '3 | ',
'B2' => '$1,234.00 | ',
'C1' => '3.00 | ',
'C2' => '10.0 | ',
];
foreach ($expected as $key => $value) {
self::assertStringContainsString($value, $html, "Cell $key");
}
$spreadsheet2 = HtmlHelper::loadHtmlStringIntoSpreadsheet($html);
$sheet2 = $spreadsheet2->getActiveSheet();
self::assertSame('General', $sheet2->getStyle('A1')->getNumberFormat()->getFormatCode());
self::assertSame($payload, $sheet2->getCell('A1')->getValue());
self::assertSame($payload, $sheet2->getCell('A1')->getFormattedValue());
self::assertSame('General', $sheet2->getStyle('B1')->getNumberFormat()->getFormatCode());
self::assertSame($payload . ' ', $sheet2->getCell('B1')->getValue());
self::assertSame($payload . ' ', $sheet2->getCell('B1')->getFormattedValue());
self::assertSame('General', $sheet2->getStyle('A2')->getNumberFormat()->getFormatCode());
self::assertSame(3, $sheet2->getCell('A2')->getValue());
self::assertSame('3', $sheet2->getCell('A2')->getFormattedValue());
self::assertSame('General', $sheet2->getStyle('B2')->getNumberFormat()->getFormatCode());
self::assertSame('$1,234.00', $sheet2->getCell('B2')->getValue());
self::assertSame('$1,234.00', $sheet2->getCell('B2')->getFormattedValue());
self::assertSame('General', $sheet2->getStyle('A3')->getNumberFormat()->getFormatCode());
self::assertSame(3.00, $sheet2->getCell('A3')->getValue());
self::assertSame('3', $sheet2->getCell('A3')->getFormattedValue());
self::assertSame('General', $sheet2->getStyle('B3')->getNumberFormat()->getFormatCode());
self::assertSame(10.0, $sheet2->getCell('B3')->getValue());
self::assertSame('10', $sheet2->getCell('B3')->getFormattedValue());
$spreadsheet2->disconnectWorksheets();
}
}