2015-08-14 7 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''', а' '' p''' - это номер. Что вы пытались достичь в этой части кода? – tmrlvi

+0

Большое спасибо за такой быстрый ответ! Как я понял, я хотел использовать «.append» для поиска по всей ячейке в строке Nr. "61". Я адаптирую следующий скрипт с помощью «try». Благодаря ! – 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

Привет, Пирс, большое спасибо за такой быстрый ответ. Надеюсь, я правильно понял ваш код и изменил «лист» на «ws», и теперь я получаю сообщение об ошибке, что «col» не определен, поэтому я удалил «col», но теперь я получаю ошибку: «try: неожиданный отступ». Благодаря ! – qode

+0

Извините, я забыл, что такое «отступ». Я новичок в py :) Я исправил это. – qode

+0

Приятно слышать; вам может потребоваться внести дополнительные изменения в зависимости от usecase; т. е. если количество ожидаемых строк изменяется или динамически, вы можете использовать 'sheet.nrows' вместо' 61' – Pyrce

Смежные вопросы