Python设置Excel单元格中的部分文本颜色

一、概述

openpyxl (目前)不支持设置单元格内部分字体颜色
xlsxwriter 支持设置单元格内部分字体颜色(创建新的Excel)

二、效果

在这里插入图片描述

三、示例

"""
Python设置Excel单元格中的部分文本颜色

openpyxl 不支持设置单元格内部分字体颜色
xlsxwriter 支持设置单元格内部分字体颜色(创建新的Excel)

pip install xlsxwriter -i https://pypi.tuna.tsinghua.edu.cn/simple
"""

import xlsxwriter


def highlight_phrase_in_cell(workbook, worksheet, row_idx, col_idx, phrases_to_highlight, cell_value):
    """
    使用 xlsxwriter 将单元格内的特定短语标红。
    :param workbook: Workbook 对象
    :param worksheet: Worksheet 对象
    :param row_idx: 行索引
    :param col_idx: 列索引
    :param phrases_to_highlight: 需要高亮的短语列表
    :param cell_value: 单元格的内容
    :return: None
    """
    if not cell_value:
        return

    # 初始化 rich_string 列表
    rich_string = []
    start = 0

    # 按照位置顺序高亮短语
    while start < len(cell_value):
        # 找到最早出现的短语及其位置
        next_phrase = None
        next_idx = len(cell_value)
        for phrase in phrases_to_highlight:
            idx = cell_value.find(phrase, start)
            if idx != -1 and idx < next_idx:
                next_phrase = phrase
                next_idx = idx

        if next_phrase is None:
            break

        # 添加之前的普通文本
        if start < next_idx:
            rich_string.append(cell_value[start:next_idx])

        # 添加高亮文本
        rich_string.append(workbook.add_format({'font_color': 'red'}))
        rich_string.append(next_phrase)
        start = next_idx + len(next_phrase)

    # 添加剩余的普通文本
    if start < len(cell_value):
        rich_string.append(cell_value[start:])

    # 写入 rich_string 到单元格
    worksheet.write_rich_string(row_idx, col_idx, *rich_string)


if __name__ == '__main__':
    workbook = xlsxwriter.Workbook('example.xlsx')
    worksheet = workbook.add_worksheet()

    cell_value = '一泰方合作伙伴表示,中泰两国关系源远流长,在经贸关系、人文交流领域关系密切。'
    phrases = ['源远流长', '人文交流']

    highlight_phrase_in_cell(workbook, worksheet, 0, 0, phrases, cell_value)

    workbook.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上富贵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值