2013-07-20 13 views
6

Używam xlrd i xlwt do przechodzenia przez określone komórki i sprawdzania ich pod kątem określonych kryteriów. Jeśli spełniają kryteria, idę dalej, jeśli nie, chcę kolorować tekst CZERWONY. Formatowanie z komórki na zmiany, niektóre mają kolor tła, niektóre są pogrubione, a niektóre mają różne rozmiary i wszystkie te różnice muszą zostać zachowane.Python xlwt: zachowaj wszystkie style, ale jeden

Czy jest jakiś łatwy sposób to zrobić?

mogę powielić bieżący format jednej z komórek wiem dość łatwo za pomocą easy_xf,

form = xlwt.easyxf(
      'font: name Gotham Narrow Book, height 140, color red;' 
      'borders: left thin, right thin, top thin, bottom thin;' 
      'pattern: pattern solid, pattern_fore_colour white, pattern_back_colour white' 
      ) 

ale to oczywiście prowadzi do problemów, ponieważ nie każda komórka ma tego samego formatowania (jak wyjaśniono powyżej, niektóre mają kolory tła lub bez obramowania lub różne style czcionek). Spojrzałem w zachowaniu stylu z tego kodu z innego StackOverflow pytanie: to pojawia

def _getOutCell(outSheet, colIndex, rowIndex): 
    """ HACK: Extract the internal xlwt cell representation. """ 
    row = outSheet._Worksheet__rows.get(rowIndex) 
    if not row: return None 

    cell = row._Row__cells.get(colIndex) 
    return cell 

def setOutCell(outSheet, col, row, value): 
    """ Change cell value without changing formatting. """ 
    # HACK to retain cell style. 
    previousCell = _getOutCell(outSheet, col, row) 
    # END HACK, PART I 

    outSheet.write(row, col, value) 

    # HACK, PART II 
    if previousCell: 
     newCell = _getOutCell(outSheet, col, row) 
     if newCell: 
      newCell.xf_idx = previousCell.xf_idx 
    # END HACK 

outSheet = outBook.get_sheet(0) 
setOutCell(outSheet, 5, 5, 'Test') 
outBook.save('output.xls') 

jakby styl odbywa się w Cell.xf_idx, ale po bliżej przyjrzeć się tej wartości, odkryłem, że jest liczbą całkowitą , pozostawiając mnie kompletnie zdumionym, jak wyodrębnić z niej pewne cechy stylu, aby zmienić jedynie kolor czcionki.

Jak już wcześniej wspomniałem, czy istnieje łatwy sposób na osiągnięcie tego?

Odpowiedz

1

Powinieneś sprawdzić moduł xlutils.styles, otworzyć program Excel z formatting_info = True, i zrobić swoją logikę i zmienić względny styl komórki, a następnie zapisać ponownie Excel.

open_workbook(excel_file_full_path, formatting_info=True) 
+0

Zaakceptuję twoją odpowiedź i nagrodzę cię nagrodą, ale jestem rozczarowany. Oczywiście już zachowuję formatowanie (jak inaczej miałbym te wszystkie komórki z tymi wszystkimi różnymi formatami?). Wszystko, co naprawdę mi dałeś, to ten link. Dałeś mi to, czego potrzebuję, aby rozwiązać ten problem, tak, ale nie wyjaśniłeś nic o 'xf_idx' lub stylach w ogóle (na co tak naprawdę liczyłem w tym pytaniu). W każdym razie, dziękuję za pomoc. – scohe001

Powiązane problemy