文章目录
- 一、概述
- 二、效果
- 三、示例
一、概述
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()