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

PhpSpreadsheet使用指南:如何给单元格内的部分指定文本设置加粗效果

PhpSpreadsheet 单个单元格内多指定词语加粗实现方案

实现单元格局部文本格式自定义需要依赖RichText富文本对象,将文本拆分为普通段和加粗段分别配置格式后再赋值给单元格

完整实现代码

以下代码可直接对接你提供的基础初始化逻辑:

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\{Font, Border, Alignment};
use PhpOffice\PhpSpreadsheet\RichText\RichText;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

// -------------------------- 核心逻辑开始 --------------------------
// 配置项:原始文本、需要加粗的关键词数组
$originalText = "这是测试内容,需要加粗的词为PHP、Excel,后续出现的PHP也会自动加粗,其他文本保持普通格式";
$targetBoldWords = ["PHP", "Excel"];

// 初始化富文本对象,创建加粗样式
$richText = new RichText();
$boldFont = $richText->createFont();
$boldFont->setBold(true);
// 可扩展加粗样式:比如设置颜色 $boldFont->setColor(new \PhpOffice\PhpSpreadsheet\Style\Color(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED));

// 文本拆分匹配逻辑
$currentOffset = 0;
$textTotalLength = mb_strlen($originalText);
while ($currentOffset < $textTotalLength) {
    $foundWord = '';
    $nearestPos = $textTotalLength;
    // 查找当前位置之后最近的匹配关键词
    foreach ($targetBoldWords as $word) {
        $pos = mb_strpos($originalText, $word, $currentOffset);
        if ($pos !== false && $pos < $nearestPos) {
            $nearestPos = $pos;
            $foundWord = $word;
        }
    }
    // 无匹配关键词,追加剩余文本后结束循环
    if (empty($foundWord)) {
        $richText->createText(mb_substr($originalText, $currentOffset));
        break;
    }
    // 追加关键词前的普通文本
    if ($nearestPos > $currentOffset) {
        $normalText = mb_substr($originalText, $currentOffset, $nearestPos - $currentOffset);
        $richText->createText($normalText);
    }
    // 追加加粗的关键词
    $richText->createTextRun($foundWord)->setFont($boldFont);
    // 偏移量移动到匹配关键词末尾
    $currentOffset = $nearestPos + mb_strlen($foundWord);
}

// 将富文本赋值到指定单元格,比如A1
$sheet->setCellValue('A1', $richText);
// -------------------------- 核心逻辑结束 --------------------------

// 后续导出逻辑
$writer = new Xlsx($spreadsheet);
$writer->save('test.xlsx');

注意事项

  • 处理包含中文的文本必须使用mb_开头的多字节处理函数,避免出现乱码、拆分错位问题
  • 如果需要给不同关键词设置不同的格式(比如不同颜色、字号),可创建多个独立的Font对象分别分配给对应关键词
  • 已经设置富文本的单元格不要再次整体配置单元格字体格式,避免覆盖局部自定义样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:15:06