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()
    

    作者:码上富贵

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python设置Excel单元格中的部分文本颜色

    发表回复