2015-08-14 92 views
3

我使用xlrd從多個excel文件中的多個單元格中提取多個數據,並使用xlwt將這些數據寫入新的excel文件。在新的excel文件中,我添加了兩個額外的行,它們會計算平均值和ttest。 現在我試圖添加一個腳本,它將搜索ttest行和所有0.05以下的值以紅色着色。在stackoverflow我找到了一些幫助,但我仍然收到一個錯誤。 (對於顏色,我使用此來源:https://pypi.python.org/pypi/xlwt
你能幫我嗎?
謝謝!python xlwt - 搜索特定值

from xlwt import * 
    style = xlwt.easyxf('font: colour red, bold on') 
    wb=xlwt.Workbook() 
    wbs=wb.add_sheet("sheet_to_write") 
    w=xlrd.open_workbook("file_to_read.xlsx") 
    ws=w.sheet_by_name("sheet_to_read") 
    c=ws.cell(2,6).value 
    wbs.write(46,1,c) 
    ... #same as the last two lines, extracting different cells from the sheet_to_red and writing them in the sheet_to_write 
    wbs.write(61,1,Formula("TTEST($B3:$B18, $B19:$B57, 2, 2)")) 

舊代碼:

for p in range(61): 
     p.append(str(sheet.cell(row,col).value)) 
     if p.value < 0.05: 
      cell.color =='22' 

代碼2:

for row in range(61): 
     for col in range(wbs.nrows): 
     cell=ws.cell(row,col) 
      try: 
       if float(cell.value) < 0.05: 
        cell.color =='22' 
      except ValueError: pass 

AttributeError: 'Cell' object has no attribute 'color' 

代碼3:

for row in range(61): 
     for col in range(wbs.nrows): 
     search=wbs.cell(row,col) 
      try: 
       if float(search.value) < 0.05: 
        wbs.write(row, col, search.value, style) 
      except ValueError: pass 
    ERROR: 
    AttributeError: 'Worksheet' object has no attribute 'cell', 

我的結論:這種方法是行不通的,因爲xlwt有沒有屬性單元格或nrows,這些屬性對於x是特定的LRD。因此,唯一可行的方法是創建另一個將使用xlrd的文件,搜索特定值並將其寫入新文件。 感謝Pyrce和tmrlvi的幫助!

+0

您可以添加完整的堆棧跟蹤(異常的完整輸出)嗎?它會幫助找到問題 – tmrlvi

+0

Nevermind,我找到了錯誤 - 你調用'''p.append'''而''''''''''''是一個數字。你在那部分代碼中想要達到什麼目的? – tmrlvi

+0

非常感謝您這麼快速的回答!據我瞭解,我想用「.append」來搜索Nr行中的所有單元格。 「61」。我將用「嘗試」來調整下一個腳本。謝謝 ! – qode

回答

3

當您只想要賦值時,您正試圖將字符串追加到整數。我猜你的意思做這樣的事情:

# Generate a color style for writing back into xlwt 
xlwt.add_palette_colour("my_color", 0x22) 
style = xlwt.easyxf('font: colour my_color;') 

for row in range(61): 
    cell = input_sheet.cell(row, col) 
    try: 
     if float(cell.value) < 0.05: 
      output_sheet.write(row, col, cell.value, style) 
    except ValueError: pass 

也正如你所看到的顏色分配是xlwt有點不同比你想象的。您可能還需要遍歷所有單元格並將它們複製到輸出表單中,或者共享讀取的同一張表單,以使其完全按照您的需要進行。

+0

嗨,皮爾斯,非常感謝你這麼快速的回答。我希望我能正確理解你的代碼,並將「sheet」改爲「ws」,現在我收到「col」未定義的錯誤,因此我刪除了「col」,但現在出現錯誤:「try:unexpected縮進」。謝謝 ! – qode

+0

對不起,我忘了什麼是「縮進」。我是py新手:)我修正了這個問題。 – qode

+0

很好聽;您可能需要根據用例進行進一步更改;即如果你期望的行數變化或是動態的,你可能希望使用'sheet.nrows'來代替'61' – Pyrce