Table cellspacing

Jul 25, 2012 at 6:32 AM
Edited Jul 25, 2012 at 6:34 AM

Hi guys,

Does somebody knows how to add cell spacing on tables?

I tried to hack the code with :

ROOT/PHPWord/Style/TableFull.php

[...]

private $_cellSpacingTop;
private $_cellSpacingLeft;
private $_cellSpacingRight;
private $_cellSpacingBottom;

public function __construct() {

[...]

$this->_cellSpacingTop = null;

$this->_cellSpacingLeft = null;

$this->_cellSpacingRight = null;

$this->_cellSpacingBottom = null;

}

[...]

public function setCellSpacingTop...

public function setCellSpacingBottom...

public function setCellSpacingRight...

public function setCellSpacingLeft...

public function getCellSpacing() {

return array($this->_cellSpacingTop, $this->_cellSpacingLeft, $this->_cellSpacingRight, $this->_cellSpacingBottom);

}

 

I followed the same way than margin and I wrote similar code to the file:

ROOT/PHPWord/Style/TableFull.php

 

For the file:ROOT/Writer/Word2007/Base.php

protected function _writeTableStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Table $style = null) {

[...]


        $spacings = $style->getCellSpacing();
        $sTop = (!is_null($spacings[0])) ? true : false;
        $sLeft = (!is_null($spacings[1])) ? true : false;
        $sRight = (!is_null($spacings[2])) ? true : false;
        $sBottom = (!is_null($spacings[3])) ? true : false;
        if($sTop || $sLeft || $sRight || $sBottom) {
            $objWriter->startElement('w:tblPr');
            $objWriter->startElement('w:tblCellSpacing');
               
            if($sTop) {
                $objWriter->startElement('w:top');
                $objWriter->writeAttribute('w:w', $spacings[0]);
                $objWriter->writeAttribute('w:type', 'dxa');
                $objWriter->endElement();
            }
               
            if($sLeft) {
                $objWriter->startElement('w:left');
                $objWriter->writeAttribute('w:w', $spacings[1]);
                $objWriter->writeAttribute('w:type', 'dxa');
                $objWriter->endElement();
            }
               
            if($sRight) {
                $objWriter->startElement('w:right');
                $objWriter->writeAttribute('w:w', $spacings[2]);
                $objWriter->writeAttribute('w:type', 'dxa');
                $objWriter->endElement();
            }
               
            if($sBottom) {
                $objWriter->startElement('w:bottom');
                $objWriter->writeAttribute('w:w', $spacings[3]);
                $objWriter->writeAttribute('w:type', 'dxa');
                $objWriter->endElement();
            }
               
            $objWriter->endElement();
            $objWriter->endElement();
        }

}

 

And finally for the file ROOT/Writer/Word2007/Styles.php:

private function _writeFullTableStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_TableFull $style) {

[...]
        $cellSpacing = $style->getCellSpacing();
        $sTop = (!is_null($cellSpacing[0])) ? true : false;
        $sLeft = (!is_null($cellSpacing[1])) ? true : false;
        $sRight = (!is_null($cellSpacing[2])) ? true : false;
        $sBottom = (!is_null($cellSpacing[3])) ? true : false;
        $spacings = ($sTop || $sLeft || $sRight || $sBottom) ? true : false;


            if($spacings) {
                $objWriter->startElement('w:tblCellSpacing');
                    if($sTop) {
                        $objWriter->startElement('w:top');
                            $objWriter->writeAttribute('w:w', $cellSpacing[0]);
                            $objWriter->writeAttribute('w:type', 'dxa');
                        $objWriter->endElement();
                    }
                    if($sLeft) {
                        $objWriter->startElement('w:left');
                            $objWriter->writeAttribute('w:w', $cellSpacing[1]);
                            $objWriter->writeAttribute('w:type', 'dxa');
                        $objWriter->endElement();
                    }
                    if($sRight) {
                        $objWriter->startElement('w:right');
                            $objWriter->writeAttribute('w:w', $cellSpacing[2]);
                            $objWriter->writeAttribute('w:type', 'dxa');
                        $objWriter->endElement();
                    }
                    if($sBottom) {
                        $objWriter->startElement('w:bottom');
                            $objWriter->writeAttribute('w:w', $cellSpacing[3]);
                            $objWriter->writeAttribute('w:type', 'dxa');
                        $objWriter->endElement();
                    }
                $objWriter->endElement();
            }

}

 

And to use that code:

[...]

$section->addTextBreak();
$styleTable = array('cellSpacingLeft' => 200);
$table = $section->addTable($styleTable);

 

But the docx file produced cannot be opened...Any idea?

 

I followed the rules here:

http://officeopenxml.com/WPtableCellSpacing.php