Поиск слова в текстовой строке на листе Excel с использованием openpyxl
Я пытаюсь найти слово в ячейке с текстовой строкой, которая выглядит следующим образом (Энергия; Зеленые здания; Высокопроизводительные здания). Вот код, который я написал, я получаю синтаксическую ошибку
for row in ws.iter_rows('D2:D11'):
for cell in row:
if 'Energy' in ws.cell.value :
Print 'yes'
Очевидно, я не хочу печатать да, это было для проверки функции поиска.
Кроме того, я хочу получить местоположение ячейки, а затем сказать openpyxl назначить цвет ячейке в той же строке в столбце E. Вот снимок моего листа Excel. Я знаю, как назначить цвет с помощью этой команды
c.fill = PatternFill(start_color='FFFFE0', end_color='FFFFE0'
fill_type='solid'
)
Мне просто нужна помощь в определении местоположения ячейки (ячейки с соответствующим текстом) и присвоении номера ее строки другой ячейке в столбце E
ОБНОВЛЕНИЕ: я написал этот код ниже, который работает хорошо для меня:
import xml.etree.ElementTree as ET
fhand = open ('My_Collection')
tree =ET.parse('My_Collection.xml')
data= fhand.read()
root = tree.getroot()
tree = ET.fromstring(data)
title_list= ['Title']
year_list = ['Year']
author_list= ['Author']
label_list = ['Label']
for child in tree:
for children in child:
if children.find('.//title')is None :
t='N'
else:
t=children.find('.//title').text
title_list.append(t)
print title_list
print len(title_list)
for child in tree:
for children in child:
if children.find('.//year')is None :
y='N'
else:
y=children.find('.//year').text
year_list.append(y)
print year_list
print len(year_list)
for child in tree:
for children in child:
if children.find('.//author')is None :
a='N'
else:
a=children.find('.//author').text
author_list.append(a)
print author_list
print len(author_list)
for child in tree:
for children in child:
if children.find('label')is None :
l='N'
else:
l=children.find('label').text
label_list.append(l)
print label_list
print len(author_list)
Modified_label_list=list()
import re
for labels in label_list:
all_labels=labels.split(';')
for a_l in all_labels:
if a_l not in Modified_label_list:
Modified_label_list.append(a_l)
else:
continue
print Modified_label_list
print len(Modified_label_list)
label_list_for_col_header= Modified_label_list[1:]
print label_list_for_col_header
print len(label_list_for_col_header)
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
for row in zip(title_list, year_list, author_list, label_list):
ws.append(row)
r = 5
for N in label_list_for_col_header:
ws.cell(row=1, column=r).value = str(N)
r += 1
from openpyxl.styles import PatternFill
general_lst= list()
COLOR_INDEX = ['FF000000', 'FFFFFFFF', 'FFFF0000', 'FF00FF00', 'FF0000FF',
'FFFFFF00', 'FFFF00FF', 'FF00FFFF', 'FF800000', 'FF008000', 'FF000080',
'FF808000', 'FF800080', 'FF008080', 'FFC0C0C0', 'FF808080', 'FF9999FF',
'FF993366', 'FFFFFFCC', 'FFCCFFFF', 'FF660066', 'FFFF8080', 'FF0066CC',
'FFCCCCFF', 'FF000080', 'FFFF00FF', 'FFFFFF00', 'FF00FFFF', 'FF800080',
'FF800000', 'FF008080', 'FF0000FF', 'FF00CCFF', 'FFCCFFFF', 'FFCCFFCC',
'FFFFFF99', 'FF99CCFF', 'FFFF99CC', 'FFCC99FF', 'FFFFCC99', 'FF3366FF',
'FF33CCCC', 'FF99CC00', 'FFFFCC00', 'FFFF9900', 'FFFF6600', 'FF666699',
'FF969696', 'FF003366', 'FF339966', 'FF003300', 'FF333300', 'FF993300',
'FF993366', 'FF333399', 'FF333333']
import random
color_lst= random.sample(COLOR_INDEX, len(label_list_for_col_header))
print color_lst
print int(label_list_for_col_header.index(label_list_for_col_header[0]))
h= len(title_list)
m= 0
for lbls in label_list_for_col_header:
j= int(label_list_for_col_header.index(lbls))+5
for row in ws.iter_rows('D2:D11'):
for cell in row:
if lbls in cell.value :
general_lst.append(cell.row)
for items in range(len(general_lst)):
ws.cell(row = general_lst[items], column = j).fill = PatternFill(start_color=str(color_lst[m]), end_color=str(color_lst[m]) , fill_type='solid')
general_lst = []
m +=1
ws.column_dimensions['A'].width = 70
ws.column_dimensions['C'].width = 23
ws.column_dimensions['B'].width = 5
wb.save("Test61.xlsx")
3 ответа
Для подхода к поиску я предлагаю вам взглянуть на ответ на этот вопрос. Создайте словарь терминов для поиска за один проход и используйте его так часто, как вам нравится. Однако вам также может быть интересно узнать, что openpyxl также поддерживает условное форматирование, чтобы вы могли делегировать форматирование в Excel. Смотрите самую нижнюю часть примеров в документации. Использовал это сам впервые на прошлой неделе. API-интерфейс Excel, как обычно, глуп, но вы можете абстрагировать его и добавить все виды форматирования в файл, даже не ища себя.
Я пытался найти решение этого вопроса, ответы здесь не помогли мне (возможно, модуль openpyxl был обновлен и, следовательно, код устарел). Итак, я немного попробовал и получил следующий рабочий код:
import openpyxl
#Path
wb = openpyxl.load_workbook(r'PathOfTheFile')
#active worksheet data
ws = wb.active
def wordfinder(searchString):
for i in range(1, ws.max_row + 1):
for j in range(1, ws.max_column + 1):
if searchString == ws.cell(i,j).value:
print("found")
print(ws.cell(i,j))
wordfinder("YourString")
Надеюсь это поможет. PS Код не выводит результат, если искомое слово не найдено
Я думаю, это поможет вам...
from openpyxl import load_workbook
wb = load_workbook('C:\\Users\luxman\Desktop\T11.xlsx')
ws=wb.active
for row in ws.iter_rows():
for cell in row:
if cell.value == "Status":
#print(ws.cell(row=cell.row, column=3).value)
print('yes')