Information om denne video
Underviser: Simon Rotendahl Video: 10:21 Lektion nr. 23 af 27
Opdatere timeseddel
Det her er vores anden video i eventyret om Python og Microsoft Excel. Vi er ved at være i slutningen af kurset, så projektet her, inkorporere også mange koncepter fra tidligere, while løkker, betinget udtryk osv. Så det bliver en svær video, men meget lærings-fyldt.
Vi vil her i videoen bruger Python til at opdatere en timeseddel, ved at lægge alle timer, fra dags dato til sidste opdatering, sammen, og skrive det ind i excel arket. Husk at stille spørgsmål, og se de tidligere videoer, hvis det er noget der ikke giver mening.
I næste video afslutter vi Excel.
Hej Simon
Når jeg bruger denne linje:
while (dt.datetime.date(sheet.cell(column=1, row=fromDate).value) is not None) and (today.date() != dt.datetime.date(sheet.cell(column=1, row=fromDate).value)):
får jeg denne fejl:
TypeError: descriptor ‘date’ for ‘datetime.datetime’ objects doesn’t apply to a ‘NoneType’ object
Hvad gør man så?
alt det bedste
Stig
Hej Stig,
Det er lidt svært for mig at sige uden at have hele koden, så vil du prøve at kopiere hele din python fil, sætte den ind på siden herunder, trykke “Create new paste”, og så sende mig linket til den side :)
https://pastebin.com/
Mvh.
Simon
Hej Simon.
Adressen er pastbin.com/jGW8qyDA
VH.
Stig
Hej Stig,
Det virker til at være samme problem som Jessie stødte ind i. Altså at datoen ikke findes i arket. Jeg har bygget et eksempel her til dig, med din kode, men med et ark som har datoer til slutningen af 2020, så kan du prøve det ved at trykke “Run” i toppen. :)
https://repl.it/@Rotendahl/Eksempel-til-Stig
Mvh.
Simon
Det kan også være at mit svar til Jessies spørgsmål herunder kan hjælpe, i tilfælde af at du ikke har set det. Hvis det ikke hjælper så sender du mig bare koden med pastebin linket :)
Hej Simon.
Når jeg forsøger at kører programmet får jeg denne fejl:
File “.\23 Opdater data i Excel.py”, line 15, in
while today.date() != dt.datetime.date(sheet.cell(column=1, row=fromDate).value):
TypeError: descriptor ‘date’ for ‘datetime.datetime’ objects doesn’t apply to a ‘NoneType’ object
Jeg tænker selv at det har noget med datoerne at gøre, altså at der ikke er nogen datotype for dagen idag, da excel arket kun fortsætter til dato: 31.12.2018.
Hvad i alverden skal jeg gøre her?
På forhånd tak.
Venlig hilsen Jessie Winther Nielsen
Hej Jessie,
Det er godt spottet det er nemlig problemet til en hvis grad. Specifikt er problemet at når vi skriver ‘sheet.cell(column=1, row=fromDate).value’ så henter vi den værdi der ligger i cellen, hvis der ikke ligger noget i cellen (som når datoen i dag, er senere end datoen i arket) så er sheet.cell(column=1, row=fromDate).value = None, altså vi får en værdi som har typen None tilbage og ikke et datetime.datetime object.
For at fikse det er der en nem måde, vi ændre linjen til
while (dt.datetime.date(sheet.cell(column=1, row=fromDate).value) is not None) and (today.date() != dt.datetime.date(sheet.cell(column=1, row=fromDate).value)):
Så nu har vores while løkke to betingelser
1. At cellen ikke må være tom, altså at, hvilket er den første del i den nye linje (før and), for når vi skriver “etEllerAndet is not None” så giver det True hvis etEllerAndet ikke er None, og det giver False hvis det er None
2. Betingelsen fra før med at i dag ikke er den dato vi er nået til
and siger så at både betingelse 1 og betingelse 2 skal være sand for at vi fortsætter i løkken, så nu vil løkken stoppe hvis den enten møder en dato som er samme dato som i dag, eller hvis den møder en tom celle.
Jeg håber det hjalp ellers må du sige til :)