Diskuze: problém s IF statement pri automatizácii


cell_obj.value != "|" or cell_obj.value !="CR" or cell_obj.value !="{" or cell_obj.value !="*"
//cell_obj.value not in ["|" , "CR", "{", "*"]
No, ale tou podminkou rikas, pouzij na jakoukoliv value krome jmenovaneho. end tam treba vubec nemas, presto se dole na nej ptas elifem.
elif cell_obj.value == "end":
A ten druhy kod nechapu. python nepouziva begin end, misto toho pouziva odsazeni zleva.
if cell_obj.value != "|" :
pyautogui.hotkey('tab')
pyautogui.sleep(1)
if cell_obj.value == "|":
import_data()
elif cell_obj.value == "end":
break
elif
---
if cell_obj.value != "|" :
BEGIN
// value tedy v zadnem pripade neni "|"
if cell_obj.value == "|": // ??? tak, jak ji muzes porovnavat s |
...
END
Nechces radeji misto ifu zacit pouzivat obdobu switch? Nebo in / not in
list?
Ale, kupodivu, v druhem kodu, mas "end" nahore, tentokrat nebude ignorovany.
>>> def zero():
return 'zero'
>>> def one():
return 'one'
>>> def indirect(i):
switcher={
0:zero,
1:one,
2:lambda:'two'
}
func=switcher.get(i,lambda :'Invalid')
return func()
>>> indirect(4)
Dodo CSharp:15.3.2020 8:52
no tým IFom chcem docieliť aby Tab preskakoval textboxy len v prípade že sa obsah bunky nerovná "{" "*" "|". V prípade ak narazí na delimiter, chcem aby zastavil a vykonal akciu, teda buď prešiel na iné okno a vytvoril riadky, alebo čo už daný delimiter vykonáva. Ide o to aby ten IF na jednu stranu podporil loop a prebiehalo importovanie dát a tab preskakoval textboxy, ale na druhú stranu aby limitoval špeciálne znaky v tabulke a vykonal pri nich blok kódu im prislúchajúci
Stale tak uplne nechapu. Muzes udelat obrazek takove faktury a co s ni chces provest? Pripadne tam treba cervene zakrouzkovat ty spesl znaky. Nejsem pythonista, tak uplne nevim, co ktera tva nebo python funkce ci gui dela.
Pises, ze ten fi to nejak preskakuje, to nedava smysl. Zkusim popsat, co si myslim, ze to dela...
cell_obj = sheet.cell(row=i, column=j) # excel bunka [radek=i, sloupec=j]
v = str(cell_obj.value) # vyber value z bunky a preved na str; schazi mi tam trim; a totez value bych pouzil do tvych podminek, ktere pracuji se stringem
pyautogui.typewrite(v) # zapis value do pyautogui, at uz je to cokoliv, ocekaval bych tam jeste nejake trim
if v != "|" or v !="CR" or v !="{" or v !="*": # pokud v neni jedno z | CR { *, tak proved toto
pyautogui.hotkey('tab') # spust funkci hotkey=tab
pyautogui.sleep(1) # nechapu, k cemu je to dobre
# cili, jestli to spravne chapu, kdyz narazi na 1 z tech 4 znaku, tak to to provede keypress v tom
# gui. A mozna proto jsou tam ty sleepy. A ty by meli byt ale spis po te keypress, pred ni mi to
# nedava smysl.
# 2. Navic, je sleep(1) dostacujici? Ono, zmacknuti klavesy chvili trva a tusim jsem
# nekde videl pouzivat 30-50ms
# 3. a proc pouzivas zmacknuti klavesy a ne primy zapis pres pyautogui.typewrite(v) ?
# Tam zadny sleep nemas. Takze by to melo byt asi spravnejsi.
# google = pyautogui.typewrite tabelator
# https://www.programcreek.com/python/example/103343/pyautogui.typewrite
# pyautogui.typewrite('\n') new line
# pyautogui.typewrite(['a', 'b', 'c', 'left', 'backspace', 'enter', 'f1'], interval=secs_between_keys)
# pyautogui.hotkey('ctrl', 'c') # ctrl-c to copy on v tom kodu sleep nepouziva
# pyautogui.hotkey('ctrl', 'v') # ctrl-v to paste
# pyautogui.typewrite('\t') # tab
# v jine casti kodu zase pouziva sleep, nejspis zamerne, ale pro import asi nic takoveho nepotrebujes
# pyautogui.press('f12')
# time.sleep(1)
# pyautogui.hotkey('ctrl','i')
# time.sleep(0.5)
elif
#nebo proved dalsi kod...
v == "{":
if cell_obj.value != "|" :
pyautogui.hotkey('tab')
pyautogui.sleep(1)
if cell_obj.value == "|":
import_data()
elif cell_obj.value == "end":
break
elif cell_obj.value != "CR" or cell_obj.value != "*" or cell_obj.value != "{":
pyautogui.hotkey('tab')
pyautogui.sleep(1)
elif cell_obj.value == "{":
pyautogui.sleep(2)
pyautogui.write('')
pyautogui.hotkey('tab')
pyautogui.sleep(2)
elif cell_obj.value == "CR":
pyautogui.sleep(2)
create_row()
elif cell_obj.value == "*":
pyautogui.sleep(3)
pyautogui.hotkey('f4')
pyautogui.sleep(4)
pyautogui.sleep(2)
pyautogui.write('')
pyautogui.hotkey('tab')
pyautogui.sleep(2)
elif v == "CR":
pyautogui.sleep(2)
create_row()
elif v == "":
pyautogui.sleep(3)
pyautogui.hotkey('f4')
pyautogui.sleep(4)
### elif cell_obj.value == "end": # toto se nevykona, protoze podminka s or
neobsahuje v!=end
# pokud v==end, pak se spusti prvni z podminek v != "|" or v !="CR" or v !="{"
or v !=""
# a zadna dalsi, ktera je ve stejne serii if-elif-else se uz nevykona, pokud o
neni jeden z tech 4 znaku.
# cili tenhle kod klidne muzes zakomentovat krizkem a nic se nestane
### break
else:
import_data() # a toto se vykona vzdy, pokud v neni jedno z | CR { *
# Pokud ti to nefunguje, tak je neco spatne. Tezko rici, co, zda je problem s
tim gui nebo s importem dat
\---
cell_obj = sheet.cell(row=i, column=j)
pyautogui.typewrite(str(cell_obj.value))
if cell_obj.value != "|" : #jakykoliv znak krome | spusti kod uvnitr ifu
pyautogui.hotkey('tab')
pyautogui.sleep(1)
# if cell_obj.value == "|": # ignoruje, tento znak je vyloucen prvnim ifem, preci, muzes zakomentova
# import_data()
# elif cell_obj.value == "end": #ok
if cell_obj.value == "end": #ok
break
elif cell_obj.value != "CR" or cell_obj.value != "*" or cell_obj.value != "{": #ok
pyautogui.hotkey('tab')
pyautogui.sleep(1)
elif cell_obj.value == "{": # ok
pyautogui.sleep(2)
pyautogui.write('')
pyautogui.hotkey('tab')
pyautogui.sleep(2)
elif cell_obj.value == "CR":# ok
pyautogui.sleep(2)
create_row()
elif cell_obj.value == "*": # ok
pyautogui.sleep(3)
pyautogui.hotkey('f4')
pyautogui.sleep(4)
Nerozumim, ceho chces presne docilit. Zo znamena import dat? Te funkci
nepredavas zadne hodnoty.
Chces docilit toho, ze kdyz znak neni zadny z tvych spesl znaku, tak ma vzdy
spustit import? cili, odfiltrovat tve znaky z kodu. Tak v tom prvnim kodu mel
byt import napsany uvnitr tohoto ifu
elif cell_obj.value != "CR" or cell_obj.value != "*" or cell_obj.value !=
"{":
Nebo, jestli tam mas nejakou sekveci spesl kod begin, prikazy, end, tak to bys
musel napsat uplne jinak
# {cr} {end} {*} {|}
if znak=='{':
special=true
if special==true: # vykonej, jenom, kdyz je special true
if znak=='}':
special=false
elif znak=='cr': ...
elif znak=='end': ...
else: # a kdyz neni, tak proved import
import()
Dodo CSharp:15.3.2020 11:18
def loop_excel_sheet():
for i in range(1, max_row+1):
for j in range(1, max_column+1):
cell_obj = sheet.cell(row=i, column=j)
pyautogui.typewrite(str(cell_obj.value))
pyautogui.sleep(1)
if cell_obj.value == "end":
break
elif cell_obj.value == "|":
pyautogui.write('')
import_data()
pyautogui.sleep(3)
elif cell_obj.value == "{": #preskočí prázdne textboxy
pyautogui.sleep(2)
pyautogui.write('')
pyautogui.hotkey('tab')
pyautogui.sleep(2)
elif cell_obj.value == "CR":
pyautogui.write('')
pyautogui.sleep(2)
create_row() #funkcia vytvorená na ukončenie hlavičky vytvorenie prvého riadku
elif cell_obj.value == "*":
pyautogui.sleep(3)
pyautogui.write('')
pyautogui.hotkey('f4') #f4 vytvorí ďalší riadok faktúry
pyautogui.sleep(4)
else:
pyautogui.hotkey('tab')
pyautogui.sleep(1)
nakoniec som to upravil takto, a ide to ako má tých vela podmienok som zahrnul do else aby sa to na začiatku neprekrývalo
+5 Zkušeností

Zobrazeno 5 zpráv z 5.