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

Laravel导出Word文档样式设置失败问题求助

解决Laravel中PHPWord导出Word文档样式不生效的问题

你遇到的样式不生效问题,核心是PHPWord的addText方法参数顺序搞错了。该方法的正确参数顺序是:addText(文本内容, 字体样式数组, 段落样式数组),你之前把字体样式放到了段落样式的参数位置,导致样式没有被应用。

正确的样式实现代码

// 创建字体样式
$boldFontStyle = ['bold' => true];
$italicFontStyle = ['italic' => true];
// 可扩展更多样式,比如字体大小、颜色
$keyFontStyle = ['bold' => true, 'size' => 12, 'color' => '#000000'];
$valueFontStyle = ['italic' => true, 'size' => 12, 'color' => '#333333'];

$section = $phpWord->addSection();

foreach ($customData as $key => $value) {
    // 把字体样式作为第二个参数传递
    $section->addText("$key: ", $keyFontStyle);
    $section->addText($value, $valueFontStyle);
    $section->addTextBreak(1);
}

完整的导出函数改造示例

public function ExportWord($id)
{
    $client = Demanderendezvous::findOrFail($id);

    $customData = [];
    foreach ($client->getAttributes() as $key => $value) {
        switch ($key) {
            case 'created_at':
                $key = 'Date Pris rendez-vous';
                $value = date('Y-m-d H:i:s', strtotime($value));
                break;
            case 'updated_at':
            case 'etat':
            case 'Id_agent':
            case 'id':
                continue 2;
        }
        $customData[$key] = $value;
    }

    $phpWord = new PhpWord();
    $section = $phpWord->addSection();

    // 定义样式
    $boldStyle = ['bold' => true, 'name' => 'Arial', 'size' => 12];
    $italicStyle = ['italic' => true, 'name' => 'Arial', 'size' => 12];

    foreach ($customData as $key => $value) {
        // 正确传递字体样式到第二个参数
        $section->addText("$key: ", $boldStyle);
        $section->addText($value, $italicStyle);
        $section->addTextBreak(1);
    }

    $filename = $client->Prenom . '_'.$client->Nom . '_' . $client->Num_RDV . '.docx';
    $path = storage_path('app/public/' . $filename);
    $objWriter = IOFactory::createWriter($phpWord, 'Word2007');
    $objWriter->save($path);
    return response()->download($path)->deleteFileAfterSend(true);
}

额外样式扩展

如果需要更复杂的样式,比如段落对齐、行距,可以单独定义段落样式并传递给第三个参数:

// 段落样式:居左,1.5倍行距
$paragraphStyle = ['align' => 'left', 'lineHeight' => 1.5];
$section->addText("$key: ", $boldStyle, $paragraphStyle);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:23:17