2013-01-04 11 views
6

Ich verwende Xlrd, Xlwt und Xlutils auf dem Betriebssystem Windows Vista mit Python 2.7. Ich habe eine Reihe von DNA-Sequenzen in einem Excel-Arbeitsblatt, die 100 Zeichen lang sind, mit jeder Sequenz in einer einzelnen Zelle. Ich versuche, Zeichen an bestimmten Positionen innerhalb jeder dieser Sequenzen in Excel hervorzuheben (fett oder farbig), habe aber keine Möglichkeit gefunden, einzelne Zeichen in einer Zelle zu formatieren. Das Anwenden eines Stils wendet es nach meinem Wissen auf die gesamte Zelle an. Daher versuche ich, die Sequenzen in einzelne Komponenten zu zerlegen, wo einige Teile der Sequenz mit einem Stil modifiziert werden, während andere nicht, und diese dann wieder zu einer einzigen Saite in einer einzelnen Zelle zusammenfassen.Formatieren Sie einzelne Zeichen in einer Excel-Zelle mit Python

Code:

 

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

Mein Problem ist, dass Sie eine Art Zugabe der ganzen Zelle ändert, und ich möchte nur bestimmte Zeichen geändert werden. Darüber hinaus überschreibt das nachfolgende Schreiben in die gleiche Zelle, was vorher dort war. Gibt es eine Möglichkeit, einzelne Zeichen in einer einzelnen Zelle zu ändern oder anders formatierten Text zu einer vorhandenen Zelle hinzuzufügen, die bereits Text enthält?

Bitte lassen Sie mich wissen, wenn Sie zusätzliche Informationen benötigen, die ich übersehen habe. Ich schätze Ihre Zeit im Voraus.

Brett

Antwort

9

Neuere Versionen von xlwt umfassen die Fähigkeit, Rich Text innerhalb einer Zelle zu verwenden. Wenn Sie normalerweise ws.write verwenden, verwenden Sie stattdessen ws.write_rich_text. Die ersten beiden Parameter sind wie üblich der Zeilenindex und der Spaltenindex. Der nächste Parameter ist jedoch eine Folge von Komponenten. Jede Komponente kann entweder ein "nackter" Textwert oder ein (Text, Schrift) -Paar sein. Die nackten Textwerte verwenden die Schriftart aus dem Gesamtstil der Zelle, die mit dem optionalen vierten Parameter angegeben werden kann.

Für die (Text-, Schrift-) Paare ist es am einfachsten, Schriftarten mit der neuen Funktion easyfont zu erstellen, die wie easyxf ist, aber nur für Schriftarten. Hier ein Beispiel:

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

Sie sollten das oben für Ihre Zwecke anpassen können. Beachten Sie, dass Sie immer noch die gesamte Zelle schreiben oder überschreiben müssen. Sie können nicht zurückgehen und später nur einen Teil einer Zelle aktualisieren.

+0

John Y, das ist genau das, was ich gesucht habe. Implementiert es und es funktionierte wie ein Charme. Vielen Dank für Ihr Fachwissen. Prost! –

Verwandte Themen