2012-08-16 13 views
5

Potrzebuję stylizować pewne komórki i wiersze w pliku xls, który tworzę poprzez mój program, ale mam kilka problemów, możliwych nieporozumień na temat działania rzeczy Xlwt easyxf.Python xlwt: używanie easyxf do stylizowania komórek podczas pisania błędu

Po pierwsze, jeśli napiszę do komórki bez wartości i tylko stylu, czy wartość wewnątrz zostanie usunięta?

drugie, próbuję napisać do komórek stosując styl i wartość komórki, ale wciąż otrzymuję błąd:

"TypeError: 'XFStyle' object is not callable". -Solved 

Teraz problemem jest to, że style nie dostać realizowane. Po zapisaniu komórek i przesłaniu ich do pliku xls nie było w ogóle koloru, bg, rozmiaru, zmian czcionki.

Próbowałem googlować i śledzić przykłady innych osób, ale z jakiegoś powodu mój kod nie działa. Oto ona:

def stylize_spreadsheet_accordingly(iFile, workbook, row_grey, row_underline, row_font_size, cells_yellow): 
    #this time iFile is the file you're overwriting 

    #styling stuff 

    print "styling the document..." 

    new_sheet.col(0).width = 256 * 18 
    new_sheet.col(1).width = 256 * 69.43 
    new_sheet.col(2).width = 256 * 9 
    new_sheet.col(3).width = 256 * 20.71 
    new_sheet.col(4).width = 256 * 8.43 

    font_size_style = xlwt.easyxf('font: name Calibri, bold on, height 280;') 
    font_underline_style = xlwt.easyxf('font: underline on;') 
    fill_grey_style = xlwt.easyxf('pattern: back_color gray25;') 
    fill_yellow_style = xlwt.easyxf('pattern: back_color yellow;') 

    iBook = open_workbook(iFile) 
    iSheet = iBook.sheet_by_index(0) 

    for row_index in range(iSheet.nrows): 
     if row_index in row_grey: 
      for col_index in range(iSheet.ncols): 
       new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, fill_grey_style) 
     if row_index in row_underline: 
      for col_index in range(iSheet.ncols): 
       new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, font_underline_style) 
     if row_index in row_font_size: 
      for col_index in range(iSheet.ncols): 
       new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, font_size_style) 
    for each in cells_yellow: 
     new_sheet.write(each[0], each[1], iSheet.cell(each[0],each[1]).value, fill_yellow_style) 

    return workbook 

new_sheet to zmienna globalna, że ​​zrobiłem w innej funkcji, która reprezentuje arkusz I dodaną do mojego xlwt skoroszycie. Skoroszyt, który przekazuję, jest plikiem, który powinien zawierać ten kod: new_sheet. Mogę go komplikować lub robić to nieetycznie, ale działa.

P.S. Jeśli jest inny sposób, w jaki mogę to zrobić, lub zmienić niektóre komórki na pełny kolor w inny sposób, proszę dać mi znać. Jeszcze raz, dzięki.

Dzięki, naprawiłem kod do tego, co mówiliście, a TypeError odszedł, ale po jego zakończeniu żadna z opcji stylizacji, które stworzyłem i nie wykorzystałem, przeszła. Plik xls był nadal w domyślnym formacie. Jak to może być?

Odpowiedz

2

Otrzymujesz 'XFStyle' object is not callable ponieważ nazywasz to jak funkcją, zamiast tylko przekazywać ją do sheet.write np.

zamiast

new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, fill_grey_style()) 

użytku

new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, fill_grey_style) 
+0

Dzięki, ale z jakiegoś powodu, żaden z moich stylów są uchwalone. Wszystko działa, jest kompilowane i działa, ale kiedy otwieram dokument xls, nie ma zmian w czcionce ani kolorze. Jedyną rzeczą, która się zmienia, są szerokości kolumn. –

0

Ty tworzenie stylów, a następnie próbuje je nazwać.

Na przykład:

font_size_style = xlwt.easyxf('font: name Calibri, bold on, height 280;') 
... 
new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, fill_grey_style()) 

Wskazówka ten bit:

fill_grey_style() 
Powiązane problemy