PHPWORD 使用筆記-合併表格(一行中插入列或一列插入行)

近期,要完成一個項目,要求大概是動態的生成一個表格,需求項目書給的樣式是這樣的

在這裏插入圖片描述
但是,使用過phpword的人都知道,phpword需要自定義樣式才能完成這樣的效果,而網上又很少有這樣的案例,官方文檔又很坑,於是,寫一個demo特此記錄,給有需要的童孩。

首先,書寫自定義樣式

其中部分樣式摘自他處

		// 部分含義可能不準確,大概就是這個意思
        $styleTable = array('borderSize' => 6, 'borderColor' => '999999'); //設置表格樣式
        $cellRowSpan = array('vMerge' => 'restart', 'valign' => 'center'); // 設置可跨行,且文字在居中
        $cellRowContinue = array('vMerge' => 'continue'); //使行連接,且無邊框線
        $cellColSpan = array('gridSpan' => 2, 'valign' => 'center'); //設置跨列
        $cellHCentered = array('align' => 'center'); //居中
        $cellVCentered = array('valign' => 'center'); //居中

		$table->addRow();  //添加一行
        $table->addCell(2000, $cellRowSpan)->addText('1 Technical knowledge and reasoning 技術知識與推理能力',
            null, $cellHCentered); //設置該列可以跨行,且樣式居中
        $table->addCell(2000,$cellRowSpan)->addText("1.1相關科學知識",null,$cellHCentered);
        $table->addCell(2000,$cellRowSpan)->addText("1.1.1人文社會科學知識",null,$cellHCentered);
        $table->addCell(5000)->addText('掌握馬克思主義基本原理、毛澤東思想和中國特色社會主義理論體系。');
		
        $table->addRow();
        $table->addCell(null, $cellRowContinue);
        $table->addCell(null, $cellRowContinue);
        $table->addCell(2000,$cellRowSpan)->addText("1.1.3外語知識",null,$cellHCentered);
        $table->addCell(5000)->addText('能夠獨立的閱讀專業外文資料,具有一定的口語交流能力。');
        $table->addRow();
        $table->addCell(null, $cellRowContinue);
        $table->addCell(2000,$cellRowSpan)->addText("1.2專業基礎知識",null,$cellHCentered);
        $table->addCell(2000,$cellRowSpan)->addText("1.2.1專業基礎知識",null,$cellHCentered);
        $table->addCell(5000)->addText('理解計算機組成及基本原理,掌握計算機處理數據的類型及算法,理解操作系統的組成、工作原理及使用方法,掌握計算機網絡基本原理,掌握數據庫基本原理及應用技術,掌握面向過程的編程思想並運用C語言編寫中等規模程序,掌握面向對象的編程思想並具有一定的算法設計和分析能力。');
        $table->addRow();
        $table->addCell(null, $cellRowContinue);
        $table->addCell(2000,$cellRowSpan)->addText("1.3專業知識",null,$cellHCentered);
        $table->addCell(2000,$cellRowSpan)->addText("1.3.1專業知識",null,$cellHCentered);
        $table->addCell(5000)->addText('理解計算機組成及基本原理,掌握計算機處理數據的類型及算法,理解操作系統的組成、工作原理及使用方法,掌握計算機網絡基本原理,掌握數據庫基本原理及應用技術,掌握面向過程的編程思想並運用C語言編寫中等規模程序,掌握面向對象的編程思想並具有一定的算法設計和分析能力。');

如果數據是動態的,可以通過獲取到的數據進行foreach進行處理,多層foreach循環(json格式)即可。
只需要在addText(替換的數據)替換。

實際效果圖:

在這裏插入圖片描述
其中基本原理既可以理解爲書寫每一行,在對其樣式進行處理,看起來就像一行或者一列。

另一個demo

$section->addTextBreak(1);
$styleTable = array('borderSize' => 6, 'borderColor' => '999999');
$cellRowSpan = array('vMerge' => 'restart', 'valign' => 'center');
$cellRowContinue = array('vMerge' => 'continue');
$cellColSpan = array('gridSpan' => 2, 'valign' => 'center');
$cellHCentered = array('align' => 'center');
$cellVCentered = array('valign' => 'center');

$PHPWord->addTableStyle('Colspan Rowspan', $styleTable);
$table = $section->addTable('Colspan Rowspan');
$table->addRow();
$table->addCell(2000, $cellRowSpan)->addText('A', null, $cellHCentered);
$table->addCell(4000, $cellColSpan)->addText('B', null, $cellHCentered);
$table->addCell(2000, $cellRowSpan)->addText('E', null, $cellHCentered);
$table->addRow();
$table->addCell(null, $cellRowContinue);
$table->addCell(2000, $cellVCentered)->addText('C', null, $cellHCentered);
$table->addCell(2000, $cellVCentered)->addText('D', null, $cellHCentered);
$table->addCell(null, $cellRowContinue);

效果圖

在這裏插入圖片描述
原網頁:https://github.com/PHPOffice/PHPWord/issues/74

大家還有什麼方法也可以進行溝通,共同進步,哈哈哈哈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章