Suche ein Wort in einem text-string in Excel-Blatt mit den openpyxl
Ich versuche, die Suche nach einem Wort in einer Zelle, die einen text-string, der wie folgt aussieht (Energie;Green Buildings;High-Performance-Gebäude). Hier ist der code, den ich schrieb, bekomme ich einen syntax-Fehler
for row in ws.iter_rows('D2:D11'):
for cell in row:
if 'Energy' in ws.cell.value :
Print 'yes'
Offensichtlich, ich will nicht drucken, ja, das war zum testen der Suchfunktion.
Zusätzlich möchte ich, um die Zelle Lage, und dann sagen Sie openpyxl, um eine Farbe zuzuweisen, um eine Zelle in derselben Zeile in Spalte E. hier ist ein Schnappschuss von meinem Excel-sheet.
Ich weiß, wie das zuweisen einer Farbe mit diesem Befehl
c.fill = PatternFill(start_color='FFFFE0', end_color='FFFFE0'
)
fill_type='solid'
Ich brauche nur Hilfe, um die Zelle Ort (die Zelle hat einen passenden text) und weisen Sie die Zeilen-Nummer zu einer anderen Zelle in Spalte E
UPDATE: ich schrieb diesen code unter, dass ist in Ordnung für mich:
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")
enumerate
)jcfollower, Danke für den Tipp.Ich denke, diese Arbeit sollte in meiner situation. Ich werde zurück, sobald ich es versuchen. Jetzt muss ich herausfinden, einen Weg, um nach text zu suchen.
AUA! Code ziemlich verbose! 😉 Wenn Sie Zeit haben sollten Sie schauen, refactoring es ein bisschen. Ich würde auch empfehlen, die Sie erhalten in der Gewohnheit, mit
print()
als Funktion für die Python-3-Kompatibilität. Wir alle hassen es, aber das ist, wie es ist. Beginnen Sie mit dem training die Muskel-Speicher!Ich weiß, sehr lange und vielleicht nicht sehr effizienten code. Es macht den job für jetzt, ich brauchte, um zu zeigen, dass mein professor diese Datei in etwa 4 Stunden von jetzt. Ich werde einiges ändern Schriftarten und hoffentlich habe ich dann eine oder zwei Stunden zum schlafen. Prost!
InformationsquelleAutor Julia_arch | 2015-12-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen Ansatz zu suchen, ich schlage vor, Sie Blick auf die Antwort auf diese Frage. Erstellen Sie ein Wörterbuch der Begriffe für die Suche in einer single-pass und verwenden Sie es so oft wie Sie möchten. Aber vielleicht möchten Sie auch wissen, dass openpyxl unterstützt auch die bedingte Formatierung, so dass Sie können übertragen Sie die Formatierung in Excel. Siehe ganz unten die Beispiele in der Dokumentation. Verwendet diese mich zum ersten mal Letzte Woche. Die Excel-API ist dumm wie gewohnt, aber Sie könnten abstrahieren, und fügen Sie alle Arten von Formatierung, um die Datei, ohne Sie jemals auf der Suche sich selbst.
Charlie, die links, die Sie mir gab, waren ein wenig erweitert, und so kam ich auf eine einfache (vielleicht nicht effizient, obwohl) code, der ist für mich arbeiten. Ich werde nach oben rechts jetzt.
Ich habe zwei kurze Fragen. 1) Suche für meinen text habe ich verwendet (für Zeilen in ws.iter_rows('D2:D11')), Allerdings werde ich zum analysieren einer größeren xml-Datei, wird der Ertrag 135 Zeilen. Ich habe eine Liste von Zeilen ( rows_lst) wie kann ich das ändern D11 in meinem ursprünglichen code, um die Länge meiner Liste?. Und wie lösche ich eine Spalte?
iter_rows()
wird standardmäßig Schleife über alle Zeilen. Für mehr Kontrolle möchten Sie vielleicht zu schauenget_squared_range()
die Ihnen erlauben, um pass in min_row, min_column, max_row, max_column. Diese Art von Frage ist besser auf der ML meiner Meinung nach. Zeilen und Spalten können nicht gelöscht oder eingefügt. Es ist ein Ausschnitt auf das repository, das gibt einige Tipps, aber im Grunde sollten Sie versuchen und vermeiden wollen, es zu tun.Charile, ich wirklich zu schätzen Ihre Hilfe. Mein professor war wirklich beeindruckt, dass ich gerade gelernt, python und schrieb ein Drehbuch zu produzieren, die eine Excel-Datei. Ich hatte keine Erfahrung in der Programmierung mit anderen, die beobachten, dass einige python-Programmierung. Ein großer Teil der code, der Erfolg geht an die genial openpyxl Modul.
InformationsquelleAutor Charlie Clark