2013-07-20 25 views
6

Belirli hücreleri taramak ve belirli ölçütler için bunları kontrol etmek için xlrd ve xlwt kullanıyorum. Hareket ettiğim kriterleri karşılıyorlarsa, değilse, KIRMIZI metinleri renklendirmek istiyorum. Hücreden hücreye değişikliklerin biçimlendirilmesi, bazılarının arka plan rengi, bazıları koyu, bazıları ise farklı boyutlardadır ve bu farklılıkların tümü korunmalıdır.Python xlwt: tüm stilleri koru ama bir

Bunu yapmanın kolay bir yolu var mı? ,

Ben

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

Ben oldukça kolay easy_xf kullanarak biliyorum hücrelerden birinde şu andaki formatını çoğaltabilirsiniz ancak yukarıda açıklandığı gibi değil, her hücre (aynı biçimlendirmeyi sahip olduğundan elbette bu sorunlarla karşılaşır Bazı arka plan renkleri veya sınırsız veya farklı yazı tipi stilleri var). tarzı Cell.xf_idx tutulursa, ancak bu değerden daha yakından bakmak aldıktan sonra, bunu bir tam sayıdır keşfedilen olarak

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

Görünen: Ben başka bir StackOverflow soru bu kodla tarzını koruyarak içine baktı Beni tamamen yazı tipi rengini değiştirebilmem için stilin belirli niteliklerini nasıl çıkaracağımı tamamen şaşırtmış halde bırakıyorum.

Daha önce de söylediğim gibi, bunu gerçekleştirmenin kolay bir yolu var mı?

cevap

1

xlutils.styles modülüne göz atmalı, excel'i formatting_info = True ile açmalı ve mantığınızı yapıp ilgili hücre stilini değiştirmeli ve ardından tekrar excel'i kaydetmelisiniz.

open_workbook(excel_file_full_path, formatting_info=True) 
+0

Cevabınızı kabul edip ödülünü ödüllendireceğim, ama hayal kırıklığına uğradım. Tabii ki halihazırda formatlamayı koruyorum (tüm bu farklı formatlarla tüm bu hücrelere nasıl sahip olabilirim?). Bana gerçekten verdiğiniz her şey o bağlantı. Bu problemi çözmek için ihtiyacım olan şeyi bana verdiniz, evet, ama 'xf_idx' ya da genel olarak stilleri hakkında hiçbir şey açıklamadınız (bu soruyla gerçekten ilgilendiğim şey). Her neyse, yardımın için teşekkürler. – scohe001