2013-01-04 102 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,這正是我所期待的。實施它,它像一個魅力。感謝您的專業知識。乾杯! –

相關問題