使用python设置单个Excel单元格中单个字符的格式

使用python设置单个Excel单元格中单个字符的格式,excel,xlrd,xlwt,xlutils,Excel,Xlrd,Xlwt,Xlutils,我在WindowsVista操作系统和Python2.7上使用xlrd、xlwt和xlutils。我在excel工作表中有一组100个字符长的DNA序列,每个序列在一个单元格中。我试图在excel中突出显示每个序列中特定位置的字符(加粗或更改颜色),但没有找到在单元格中格式化单个字符的方法。据我所知,应用样式将其应用于整个单元格。因此,我尝试将序列分解为单独的组件,其中序列的某些部分将使用样式进行修改,而其他部分则不会,然后将它们重新整理成单个单元格中的单个字符串 代码: rb=打开工作簿('M

我在WindowsVista操作系统和Python2.7上使用xlrd、xlwt和xlutils。我在excel工作表中有一组100个字符长的DNA序列,每个序列在一个单元格中。我试图在excel中突出显示每个序列中特定位置的字符(加粗或更改颜色),但没有找到在单元格中格式化单个字符的方法。据我所知,应用样式将其应用于整个单元格。因此,我尝试将序列分解为单独的组件,其中序列的某些部分将使用样式进行修改,而其他部分则不会,然后将它们重新整理成单个单元格中的单个字符串

代码:

rb=打开工作簿('Mybook',格式化信息=True) rs=rb.表格按索引(0) wb=副本(rb) ws=wb.get_表(0) minus35style=xlwt.easyxf('font:bold 1')#我只想要一个字符的样式 对于范围(0368,1)内的b: rscellin=rs.cell(b,9) f=rscellin.value tominus35=str(f[0:34]) minus35=str(f[35:36]) ws.write(b,14,tominus35) ws.write(b,14,minus35,minus35style) wb.save('Mybook') 我的问题是添加样式会改变整个单元格,我只想修改某些字符。此外,对同一单元格的后续写入将覆盖以前的内容。有没有办法修改单个单元格中的单个字符,或者向已包含文本的现有单元格中添加不同格式的文本

如果您需要我忽略的其他信息,请告诉我。我感谢你提前抽出时间


Brett

最新版本的
xlwt
包括在单元格中使用富文本的功能。如果您通常使用
ws.write
,请改用
ws.write\u rich\u text
。前两个参数通常是行索引和列索引;但下一个参数是一系列组件。每个组件可以是“裸”文本值或(文本、字体)对。裸文本值将使用单元格整体样式中的字体,可以使用可选的第四个参数指定该字体

对于(文本、字体)对,使用新的
easyfont
功能生成字体是最简单的,这有点像
easyxf
,但只针对字体。以下是一个例子:

import xlwt

wb = xlwt.Workbook()
ws = wb.add_sheet('Sheet1')

font0 = xlwt.easyfont('')
font1 = xlwt.easyfont('bold true')
font2 = xlwt.easyfont('color_index red')
style = xlwt.easyxf('font: color_index blue')

seg1 = ('bold', font1)
seg2 = ('red', font2)
seg3 = ('plain', font0)
seg4 = ('boldagain', font1)

ws.write_rich_text(2, 5, (seg1, seg2, seg3, seg4))
ws.write_rich_text(4, 1, ('xyz', seg2, seg3, '123'), style)

wb.save('rich_text.xls')

您应该能够根据自己的目的调整上述内容。请注意,您仍然必须一次写入或覆盖整个单元格;您以后不能返回并只更新单元格的一部分。

John Y,这正是我要找的。实施它,它就像一个魅力。谢谢你的专业知识。干杯
import xlwt

wb = xlwt.Workbook()
ws = wb.add_sheet('Sheet1')

font0 = xlwt.easyfont('')
font1 = xlwt.easyfont('bold true')
font2 = xlwt.easyfont('color_index red')
style = xlwt.easyxf('font: color_index blue')

seg1 = ('bold', font1)
seg2 = ('red', font2)
seg3 = ('plain', font0)
seg4 = ('boldagain', font1)

ws.write_rich_text(2, 5, (seg1, seg2, seg3, seg4))
ws.write_rich_text(4, 1, ('xyz', seg2, seg3, '123'), style)

wb.save('rich_text.xls')