2012-08-16 92 views
5

我需要通過我的程序創建xls文件中某些單元格和行的風格,但我遇到了一些問題,可能存在關於xlwt easyxf工具的誤解。Python xlwt:在編寫bug時使用easyxf來設置單元格的風格

首先,如果我寫入沒有值的單元格而只是樣式,內部的值是否被擦除?

其次,我想寫使用風格和細胞的值單元格,但我不斷收到一個錯誤:

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

現在的問題是,風格沒有得到落實。在寫入單元格並輸出到xls文件之後,根本沒有顏色,bg,大小,字體的改變。

我試着用谷歌搜索這個並且跟隨其他人的例子,但是無論出於什麼原因,我的代碼都不起作用。那就是:

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是一個全局變量,我在代表我加入到我的xlwt工作簿紙張另一個函數取得。我傳入的工作簿是包含該文件的文件new_sheet。我可能會過度複雜或不道德地做這件事,但它有效。

P.S.如果有不同的方式可以做到這一點,或者以某種不同的方式將某些單元格更改爲全綵色,請讓我知道。再一次,謝謝。

謝謝,我解決了你們所說的代碼,並且TypeError消失了,但是在完成之後,我創建和使用的所有樣式選項都沒有通過。 xls文件仍然是其默認格式。怎麼會這樣?

回答

2

您得到'XFStyle' object is not callable,因爲您將它稱爲函數而不是將其傳遞給sheet.write例如,

代替

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

使用

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

謝謝,但無論出於何種原因,沒有我的風格正在制定。一切正常,編譯並運行,但是當我打開xls文檔時,字體或顏色沒有變化。唯一改變的是列寬。 – 2012-08-17 03:55:37

0

要創建的樣式,然後嘗試給他們打電話。

例如:

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

注意這一點:

fill_grey_style()