Skip to content

Commit

Permalink
improving merge cell functionality, adding ability to suppress header…
Browse files Browse the repository at this point in the history
… row
  • Loading branch information
mk-j committed Jul 28, 2015
1 parent 935c501 commit 512a23c
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 37 deletions.
23 changes: 11 additions & 12 deletions example-cli-merge-cells.php
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
<?php
include_once("xlsxwriter.class.php");

$header = array();
$data = array(
array("Merge Cells Example"),
array(100, 200, 300, 400, 500)
);
$merge_cells = array(
array(
array(0, 0),
array(0, 4)
)
);
$header = array("string","string","string","string","string");
$row1 = array("Merge Cells Example");
$row2 = array(100, 200, 300, 400, 500);
$row3 = array(110, 210, 310, 410, 510);

$sheet_name = 'Sheet1';
$writer = new XLSXWriter();
$writer->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');


45 changes: 20 additions & 25 deletions xlsxwriter.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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('<row collapsed="false" customFormat="false" customHeight="false" hidden="false" ht="12.1" outlineLevel="0" r="' . (1) . '">');
foreach ($header_row as $k => $v) {
$this->writeCell($sheet->file_writer, 0, $k, $v, $cell_format_index = '0');//'0'=>'string'
$sheet->file_writer->write('<row collapsed="false" customFormat="false" customHeight="false" hidden="false" ht="12.1" outlineLevel="0" r="' . (1) . '">');
foreach ($header_row as $k => $v) {
$this->writeCell($sheet->file_writer, 0, $k, $v, $cell_format_index = '0');//'0'=>'string'
}
$sheet->file_writer->write('</row>');
$sheet->row_count++;
}
$sheet->file_writer->write('</row>');
$sheet->row_count++;
$this->current_sheet = $sheet_name;
}

Expand All @@ -247,9 +250,10 @@ public function writeSheetRow($sheet_name, array $row)
}

$sheet->file_writer->write('<row collapsed="false" customFormat="false" customHeight="false" hidden="false" ht="12.1" outlineLevel="0" r="' . ($sheet->row_count + 1) . '">');
//$row = array_slice($row, 0, count($sheet->columns) );
$column_count=0;
foreach ($row as $k => $v) {
$this->writeCell($sheet->file_writer, $sheet->row_count, $k, $v, $sheet->columns[$k]);
$this->writeCell($sheet->file_writer, $sheet->row_count, $column_count, $v, $sheet->columns[$column_count]);
$column_count++;
}
$sheet->file_writer->write('</row>');
$sheet->row_count++;
Expand All @@ -265,7 +269,7 @@ protected function finalizeSheet($sheet_name)

$sheet->file_writer->write( '</sheetData>');

if (count($sheet->merge_cells)) {
if (!empty($sheet->merge_cells)) {
$sheet->file_writer->write( '<mergeCells>');
foreach ($sheet->merge_cells as $range) {
$sheet->file_writer->write( '<mergeCell ref="' . $range . '"/>');
Expand All @@ -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;
Expand All @@ -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);
}

Expand Down

0 comments on commit 512a23c

Please sign in to comment.