2013-01-04 98 views
6

我在使用Python 2.7的Windows Vista OS上使用xlrd,xlwt和xlutils。我在Excel工作表中有一组长度为100个字符的DNA序列,每个序列在一个单元格中。我试图突出显示Excel中每个序列中的特定位置上的字符(加粗或改变颜色),但还没有找到格式化单元格内单个字符的方法。就我所知,应用样式将其应用于整个单元格。因此,我试图将序列分解为单个组件,其中序列的某些部分将使用样式进行修改,而其他部分则不会,然后将这些序列一起整理为单个单元格中的单个字符串。使用python在单个Excel单元格中格式化单个字符

代码:

 

    rb = open_workbook('Mybook', formatting_info=True) 
    rs = rb.sheet_by_index(0) 
    wb = copy(rb) 
    ws = wb.get_sheet(0) 

    minus35style = xlwt.easyxf('font: bold 1') # style I'd like for just one character 
    for b in range(0, 368, 1): 
     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') 

我的问题是,添加一种风格改变了整个细胞,而我只想某些字符进行修改。此外,后续写入同一单元会覆盖之前的内容。有没有办法修改单个单元格中的单个字符,或将不同格式的文本添加到已有文本的现有单元格中?

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

布雷特

回答

9

xlwt最新版本包括对小区内使用富文本的功能。在通常情况下,您将使用ws.write,而不是使用ws.write_rich_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') 

你应该能够适应上述为你的目的。请注意,您仍然必须立即写入或覆盖整个单元格;你以后不能回去只更新一部分单元。

+0

约翰Y,这正是我所期待的。实施它,它像一个魅力。感谢您的专业知识。干杯! –

相关问题