You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHPWord生成目录仅添加最后一页一级标题问题求助

解决PHPWord生成目录仅显示最后一个一级标题的问题

问题场景

使用PHPWord生成目录时,在不同页面添加了2个一级标题,但输出文件的目录中仅显示最后一个一级标题。

输出效果

原代码

<?php
include_once 'vendor/phpoffice/phpword/src/PhpWord/bootstrap.php';
 $phpWord = new \PhpOffice\PhpWord\PhpWord();

 $phpWord->getSettings()->setUpdateFields(true);

 $section = $phpWord->addSection();
 $phpWord->addSection(['pageNumberingStart' => 0]);

 $section->addText('Table of Content', 'title');
 $section->addToc();

 $section = $phpWord->addSection();
 $section->addTitle('Título 1', 1);
 $section->addPageBreak();

 $section = $phpWord->addSection();
 $section->addTitle('Titulo 2', 1);
 $section->addPageBreak();

 $phpWord->save('sampleTocOutput.docx');

问题原因

代码核心问题是额外创建了一个未使用的Section:在给$section赋值第一个Section后,又调用$phpWord->addSection(['pageNumberingStart' => 0])生成新Section,但未将其赋值给变量,后续目录仍添加在第一个未设置页码规则的Section中。这种Section管理混乱导致PHPWord无法正确关联所有标题的页码信息,最终仅识别到最后一个标题。

解决方案

将目录所在的Section直接设置为页码从0开始(避免目录占用正文页码),后续正文Section自动延续页码即可。修改后的代码如下:

<?php
include_once 'vendor/phpoffice/phpword/src/PhpWord/bootstrap.php';
$phpWord = new \PhpOffice\PhpWord\PhpWord();

$phpWord->getSettings()->setUpdateFields(true);

// 创建目录Section,设置页码从0开始
$section = $phpWord->addSection(['pageNumberingStart' => 0]);
$section->addText('目录', 'title');
$section->addToc();

// 正文第一个Section,页码自动从1开始
$section = $phpWord->addSection();
$section->addTitle('标题1', 1);
$section->addPageBreak();

// 正文第二个Section
$section = $phpWord->addSection();
$section->addTitle('标题2', 1);
$section->addPageBreak();

$phpWord->save('sampleTocOutput.docx');

补充说明

生成docx文件后,若Word未自动更新目录,可选中目录后按F9键手动刷新,即可看到完整的目录条目。

内容的提问来源于stack exchange,提问作者Premlatha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:27:40