2013-01-04 15 views
6

Sto usando xlrd, xlwt e xlutils sul sistema operativo Windows Vista con Python 2.7. Ho un set di sequenze di DNA in un foglio di lavoro Excel di 100 caratteri, con ogni sequenza in una singola cella. Sto cercando di evidenziare i caratteri in posizioni specifiche all'interno di ciascuna di queste sequenze in Excel (in grassetto o cambia colore), ma non ho trovato un modo per formattare i singoli caratteri all'interno di una cella. Applicare uno stile lo applica all'intera cella a mia conoscenza. Quindi sto cercando di suddividere le sequenze in singoli componenti dove alcune parti della sequenza saranno modificate con uno stile mentre altre no, e per poi ricomporle insieme in una singola stringa in una singola cella.Formatta singoli caratteri in una singola cella Excel con python

Codice:

 

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

Il mio problema è che l'aggiunta di uno stile cambia tutta la cella, e voglio solo alcuni caratteri da modificare. Inoltre, la successiva scrittura sulla stessa cella sovrascrive quello che c'era in precedenza. C'è un modo per modificare singoli caratteri in una singola cella o per aggiungere un testo formattato in modo diverso a una cella esistente che contiene già del testo?

Per favore fatemi sapere se avete bisogno di ulteriori informazioni che ho trascurato. Apprezzo molto il tuo tempo.

Brett

risposta

9

versioni più recenti di xlwt includono la possibilità di utilizzare Rich Text all'interno di una cella. Dove normalmente si usa ws.write, utilizzare invece ws.write_rich_text. I primi due parametri sono l'indice di riga e l'indice di colonna, come al solito; ma il parametro successivo è una sequenza di componenti. Ogni componente può essere un valore di testo "nudo" o una coppia (testo, carattere). I valori di testo nudo utilizzeranno il carattere dallo stile generale della cella, che può essere specificato utilizzando il quarto parametro opzionale.

Per le coppie (testo, carattere), è più semplice generare caratteri utilizzando la nuova funzione easyfont, che è un po 'come easyxf ma solo per i caratteri. Ecco un esempio:

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

Dovresti essere in grado di adattare quanto sopra per i tuoi scopi. Nota che devi ancora scrivere o sovrascrivere l'intera cella contemporaneamente; non puoi tornare indietro e aggiornare solo una parte di una cella in un secondo momento.

+0

John Y, questo è esattamente quello che stavo cercando. Lo ha implementato e ha funzionato come un fascino. Grazie per la tua esperienza. Saluti! –

Problemi correlati