Skip to content

Commit 8b2d941

Browse files
committed
Specify data type in html tags using attributes #3444
1 parent 66221bf commit 8b2d941

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/PhpSpreadsheet/Reader/Html.php

+8
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,13 @@ private function processDomElementDataFormat(Worksheet $sheet, int $row, string
564564
}
565565
}
566566

567+
private function processDomElementDataType(Worksheet $sheet, int $row, string $column, array $attributeArray): void
568+
{
569+
if (isset($attributeArray['data-type'])) {
570+
$sheet->getCell($column . $row)->setDataType($attributeArray['data-type']);
571+
}
572+
}
573+
567574
private function processDomElementThTd(Worksheet $sheet, int &$row, string &$column, string &$cellContent, DOMElement $child, array &$attributeArray): void
568575
{
569576
while (isset($this->rowspan[$column . $row])) {
@@ -582,6 +589,7 @@ private function processDomElementThTd(Worksheet $sheet, int &$row, string &$col
582589
$this->processDomElementAlign($sheet, $row, $column, $attributeArray);
583590
$this->processDomElementVAlign($sheet, $row, $column, $attributeArray);
584591
$this->processDomElementDataFormat($sheet, $row, $column, $attributeArray);
592+
$this->processDomElementDataType($sheet, $row, $column, $attributeArray);
585593

586594
if (isset($attributeArray['rowspan'], $attributeArray['colspan'])) {
587595
//create merging rowspan and colspan

tests/PhpSpreadsheetTests/Reader/Html/HtmlTest.php

+17
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace PhpOffice\PhpSpreadsheetTests\Reader\Html;
44

5+
use PhpOffice\PhpSpreadsheet\Cell\DataType;
56
use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
67
use PhpOffice\PhpSpreadsheet\Reader\Html;
78
use PhpOffice\PhpSpreadsheet\Style\Alignment;
@@ -363,4 +364,20 @@ public function testBorderWithColspan(): void
363364
self::assertEquals(Border::BORDER_THIN, $border->getBorderStyle());
364365
}
365366
}
367+
368+
public function testDataType(): void
369+
{
370+
$html = '<table>
371+
<tr>
372+
<td data-type="b">1</td>
373+
<td data-type="s">12345678987654321</td>
374+
</tr>
375+
</table>';
376+
$reader = new Html();
377+
$spreadsheet = $reader->loadFromString($html);
378+
$firstSheet = $spreadsheet->getSheet(0);
379+
380+
self::assertEquals(DataType::TYPE_BOOL, $firstSheet->getCell('A1')->getDataType());
381+
self::assertEquals(DataType::TYPE_STRING, $firstSheet->getCell('B1')->getDataType());
382+
}
366383
}

0 commit comments

Comments
 (0)