【问题标题】:How to merge cells in PHPWord? Or to have different number of cells in each table row?如何在 PHPWord 中合并单元格?或者在每个表格行中有不同数量的单元格?
【发布时间】:2012-08-12 19:44:57
【问题描述】:

尝试使用 PHP 库 PHPWord 创建 MS Word 文档。

你能帮我如何合并文档中的两个或多个单元格吗?或者如何在每个表格行中有不同数量的单元格?

我尝试将单元格定义为:

$cell11 = array('gridSpan'=>2);

但它没有用....

提前谢谢你!

【问题讨论】:

    标签: phpword


    【解决方案1】:

    像这样添加代码

    1. PHPWord/Section/Table/Cell.php

    /**
     * How many columns this cell spans
     * @var int
     */
    private $_gridSpan;
    
    public function__construct($insideOf,$pCount,$width=null,$style=null,$gridSpan=1){
        $this->_insideOf = $insideOf;
        ...
        $this->_gridSpan = $gridSpan;
    }
    
    /**
     * Get the number of columns this cell spans
     *
     * @return int
     */
    public function getGridSpan(){
        return $this->_gridSpan;
    }
    

    2。 PHPWord/Section/Table.php

         public function addCell($width,$style=null,$gridSpan=1){
                $cell = new PHPWord_Section_Table_Cell($this->_insideOf,
                        $this->_pCount,$width,$style,$gridSpan);
          }
    

    3. PHPWord/Writer/Word2007/Base.php

    protected function _writeTable(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Table $table) {
        $_rows = $table->getRows();
        $_cRows = count($_rows);
        ...
        $_heights = $table->getRowHeights();
        for ($i = 0; $i < $_cRows; $i++) {
            $row = $_rows[$i];
            $height = $_heights[$i];
            //add
            $objWriter->startElement('w:trPr');
            //FIXME: Make this an option on a row or table
            $objWriter->startElement('w:cantSplit');
            $objWriter->endElement();
            $objWriter->endElement();
            //end add
            foreach ($rows as $cell) {
                ...
                $width = $cell->getWidth();
                //add 
                $gridSpan = $cell->getGridSpan();
                //end add
                ...
                //add
                if ($gridSpan > 1) {
                    $objWriter->startElement('w:gridSpan');
                    $objWriter->writeAttribute('w:val',$gridSpan);
                    $objWriter->endElement();
                    //end add
                    ...
                }
            }
        }
    }
    

    你可以这样使用它:

    $PHPWord  = new PHPWord();
    $section  = $PHPWord->createSection();
    $table    = $section->addTable();
    $table->addRow();
    $table->addCell(1000,null,2)->addText('info');
    
    $table->addRow();
    $table->addCell(500)->addText('Name');
    $table->addCell(500)->addText('Sex');
    

    对不起风格,你可以这样使用:

    $tableStyle = array('borderSize'=>6, 'borderColor'=>'006699', 'cellMargin'=>80);
    $PHPWord->addTableStyle('tableStyle',$tableStyle,null);
    $table    = $section->addTable('tableStyle');
    $table->addRow();
    $table->addCell(1000,null,2)->addText('info',null,array('align'=>'center'));
    
    $table->addRow();
    $table->addCell(500)->addText('Name',null,array('align'=>'center'));
    $table->addCell(500)->addText('Sex',null,array('align'=>'center'));
    

    【讨论】:

      猜你喜欢
      • 2015-10-24
      • 1970-01-01
      • 2012-05-09
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      相关资源
      最近更新 更多