Merge pull request #2808 from PHPOffice/Performance-Ods-Writer
Performance Ods/Html Writers
This commit is contained in:
commit
56509d9a3e
|
|
@ -477,12 +477,8 @@ class Html extends BaseWriter
|
||||||
$column = $minCol;
|
$column = $minCol;
|
||||||
while ($column <= $maxCol) {
|
while ($column <= $maxCol) {
|
||||||
// Cell exists?
|
// Cell exists?
|
||||||
if ($sheet->cellExistsByColumnAndRow($column, $row)) {
|
$cellAddress = Coordinate::stringFromColumnIndex($column) . $row;
|
||||||
$rowData[$column] = Coordinate::stringFromColumnIndex($column) . $row;
|
$rowData[$column++] = ($sheet->getCellCollection()->has($cellAddress)) ? $cellAddress : '';
|
||||||
} else {
|
|
||||||
$rowData[$column] = '';
|
|
||||||
}
|
|
||||||
++$column;
|
|
||||||
}
|
}
|
||||||
$html .= $this->generateRow($sheet, $rowData, $row - 1, $cellType);
|
$html .= $this->generateRow($sheet, $rowData, $row - 1, $cellType);
|
||||||
}
|
}
|
||||||
|
|
@ -1232,7 +1228,7 @@ class Html extends BaseWriter
|
||||||
|
|
||||||
private function generateRowCellCss(Worksheet $worksheet, $cellAddress, $row, $columnNumber)
|
private function generateRowCellCss(Worksheet $worksheet, $cellAddress, $row, $columnNumber)
|
||||||
{
|
{
|
||||||
$cell = ($cellAddress > '') ? $worksheet->getCell($cellAddress) : '';
|
$cell = ($cellAddress > '') ? $worksheet->getCellCollection()->get($cellAddress) : '';
|
||||||
$coordinate = Coordinate::stringFromColumnIndex($columnNumber + 1) . ($row + 1);
|
$coordinate = Coordinate::stringFromColumnIndex($columnNumber + 1) . ($row + 1);
|
||||||
if (!$this->useInlineCss) {
|
if (!$this->useInlineCss) {
|
||||||
$cssClass = 'column' . $columnNumber;
|
$cssClass = 'column' . $columnNumber;
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ use PhpOffice\PhpSpreadsheet\Cell\DataType;
|
||||||
use PhpOffice\PhpSpreadsheet\Shared\XMLWriter;
|
use PhpOffice\PhpSpreadsheet\Shared\XMLWriter;
|
||||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
use PhpOffice\PhpSpreadsheet\Worksheet\Row;
|
use PhpOffice\PhpSpreadsheet\Worksheet\Row;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Worksheet\RowCellIterator;
|
||||||
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
|
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
|
||||||
use PhpOffice\PhpSpreadsheet\Writer\Exception;
|
use PhpOffice\PhpSpreadsheet\Writer\Exception;
|
||||||
use PhpOffice\PhpSpreadsheet\Writer\Ods;
|
use PhpOffice\PhpSpreadsheet\Writer\Ods;
|
||||||
|
|
@ -146,10 +147,10 @@ class Content extends WriterPart
|
||||||
$numberRowsRepeated = self::NUMBER_ROWS_REPEATED_MAX;
|
$numberRowsRepeated = self::NUMBER_ROWS_REPEATED_MAX;
|
||||||
$span_row = 0;
|
$span_row = 0;
|
||||||
$rows = $sheet->getRowIterator();
|
$rows = $sheet->getRowIterator();
|
||||||
while ($rows->valid()) {
|
foreach ($rows as $row) {
|
||||||
|
$cellIterator = $row->getCellIterator();
|
||||||
--$numberRowsRepeated;
|
--$numberRowsRepeated;
|
||||||
$row = $rows->current();
|
if ($cellIterator->valid()) {
|
||||||
if ($row->getCellIterator()->valid()) {
|
|
||||||
if ($span_row) {
|
if ($span_row) {
|
||||||
$objWriter->startElement('table:table-row');
|
$objWriter->startElement('table:table-row');
|
||||||
if ($span_row > 1) {
|
if ($span_row > 1) {
|
||||||
|
|
@ -168,26 +169,23 @@ class Content extends WriterPart
|
||||||
$span_row = 0;
|
$span_row = 0;
|
||||||
}
|
}
|
||||||
$objWriter->startElement('table:table-row');
|
$objWriter->startElement('table:table-row');
|
||||||
$this->writeCells($objWriter, $row);
|
$this->writeCells($objWriter, $cellIterator);
|
||||||
$objWriter->endElement();
|
$objWriter->endElement();
|
||||||
} else {
|
} else {
|
||||||
++$span_row;
|
++$span_row;
|
||||||
}
|
}
|
||||||
$rows->next();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write cells of the specified row.
|
* Write cells of the specified row.
|
||||||
*/
|
*/
|
||||||
private function writeCells(XMLWriter $objWriter, Row $row): void
|
private function writeCells(XMLWriter $objWriter, RowCellIterator $cells): void
|
||||||
{
|
{
|
||||||
$numberColsRepeated = self::NUMBER_COLS_REPEATED_MAX;
|
$numberColsRepeated = self::NUMBER_COLS_REPEATED_MAX;
|
||||||
$prevColumn = -1;
|
$prevColumn = -1;
|
||||||
$cells = $row->getCellIterator();
|
foreach ($cells as $cell) {
|
||||||
while ($cells->valid()) {
|
|
||||||
/** @var \PhpOffice\PhpSpreadsheet\Cell\Cell $cell */
|
/** @var \PhpOffice\PhpSpreadsheet\Cell\Cell $cell */
|
||||||
$cell = $cells->current();
|
|
||||||
$column = Coordinate::columnIndexFromString($cell->getColumn()) - 1;
|
$column = Coordinate::columnIndexFromString($cell->getColumn()) - 1;
|
||||||
|
|
||||||
$this->writeCellSpan($objWriter, $column, $prevColumn);
|
$this->writeCellSpan($objWriter, $column, $prevColumn);
|
||||||
|
|
@ -250,8 +248,8 @@ class Content extends WriterPart
|
||||||
Comment::write($objWriter, $cell);
|
Comment::write($objWriter, $cell);
|
||||||
$objWriter->endElement();
|
$objWriter->endElement();
|
||||||
$prevColumn = $column;
|
$prevColumn = $column;
|
||||||
$cells->next();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$numberColsRepeated = $numberColsRepeated - $prevColumn - 1;
|
$numberColsRepeated = $numberColsRepeated - $prevColumn - 1;
|
||||||
if ($numberColsRepeated > 0) {
|
if ($numberColsRepeated > 0) {
|
||||||
if ($numberColsRepeated > 1) {
|
if ($numberColsRepeated > 1) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue