From 512a23cd6f7995d89cc4f697670141fd63aab5be Mon Sep 17 00:00:00 2001 From: mk-j Date: Tue, 28 Jul 2015 10:21:29 -0600 Subject: [PATCH] improving merge cell functionality, adding ability to suppress header row --- example-cli-merge-cells.php | 23 +++++++++---------- xlsxwriter.class.php | 45 +++++++++++++++++-------------------- 2 files changed, 31 insertions(+), 37 deletions(-) diff --git a/example-cli-merge-cells.php b/example-cli-merge-cells.php index 59f83e2cc..e6652a873 100644 --- a/example-cli-merge-cells.php +++ b/example-cli-merge-cells.php @@ -1,19 +1,18 @@ writeSheet($data, 'Sheet1', $header, $merge_cells); +$writer->writeSheetHeader($sheet_name, $header, $suppress_header_row = true); +$writer->writeSheetRow($sheet_name, $row1); +$writer->writeSheetRow($sheet_name, $row2); +$writer->writeSheetRow($sheet_name, $row3); +$writer->markMergedCell($sheet_name, $start_row=0, $start_col=0, $end_row=0, $end_col=4); $writer->writeToFile('example.xlsx'); diff --git a/xlsxwriter.class.php b/xlsxwriter.class.php index b49fa57b8..d6a2d6da9 100644 --- a/xlsxwriter.class.php +++ b/xlsxwriter.class.php @@ -211,7 +211,7 @@ private function addCellFormat($cell_format) return $position; } - public function writeSheetHeader($sheet_name, array $header_types) + public function writeSheetHeader($sheet_name, array $header_types, $suppress_row = false) { if (empty($sheet_name) || empty($header_types) || !empty($this->sheets[$sheet_name])) return; @@ -223,14 +223,17 @@ public function writeSheetHeader($sheet_name, array $header_types) { $sheet->columns[] = $this->addCellFormat($v); } - $header_row = array_keys($header_types); + if (!$suppress_row) + { + $header_row = array_keys($header_types); - $sheet->file_writer->write(''); - $sheet->row_count++; $this->current_sheet = $sheet_name; } @@ -247,9 +250,10 @@ public function writeSheetRow($sheet_name, array $row) } $sheet->file_writer->write(''); $sheet->row_count++; @@ -265,7 +269,7 @@ protected function finalizeSheet($sheet_name) $sheet->file_writer->write( ''); - if (count($sheet->merge_cells)) { + if (!empty($sheet->merge_cells)) { $sheet->file_writer->write( ''); foreach ($sheet->merge_cells as $range) { $sheet->file_writer->write( ''); @@ -290,26 +294,21 @@ protected function finalizeSheet($sheet_name) $sheet->file_writer->close(); $sheet->finalized=true; } - - protected function setMergeCells($sheet_name, array $merge_cells) + + public function markMergedCell($sheet_name, $start_cell_row, $start_cell_column, $end_cell_row, $end_cell_column) { if (empty($sheet_name) || $this->sheets[$sheet_name]->finalized) return; self::initializeSheet($sheet_name); $sheet = &$this->sheets[$sheet_name]; - foreach ($merge_cells as $v) { - if (!is_array($v) || count($v) !== 2 || count($v[0]) !== 2 || count($v[1]) !== 2) { - continue; - } - $startCell = self::xlsCell($v[0][0], $v[0][1]); - $endCell = self::xlsCell($v[1][0], $v[1][1]); - $sheet->merge_cells[] = $startCell . ":" . $endCell; - } + $startCell = self::xlsCell($start_cell_row, $start_cell_column); + $endCell = self::xlsCell($end_cell_row, $end_cell_column); + $sheet->merge_cells[] = $startCell . ":" . $endCell; } - public function writeSheet(array $data, $sheet_name='', array $header_types=array(), array $merge_cells=array() ) + public function writeSheet(array $data, $sheet_name='', array $header_types=array()) { $sheet_name = empty($sheet_name) ? 'Sheet1' : $sheet_name; $data = empty($data) ? array(array('')) : $data; @@ -321,10 +320,6 @@ public function writeSheet(array $data, $sheet_name='', array $header_types=arra { $this->writeSheetRow($sheet_name, $row); } - if (!empty($merge_cells)) - { - $this->setMergeCells($sheet_name, $merge_cells); - } $this->finalizeSheet($sheet_name); }