NemProgrammering.dk logo

Indsæt og opdater data i Excel-ark med Python

Lær Python programmering » Indsæt og opdater data i Excel-ark med Python # 23
Inkluderet:
Livstidsadgang
27 videolektioner
7 timers undervisning
Stil spørgsmål
Kursusbevis

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.

Spørgsmål og kommentarer

Kun medlemmer med adgang til dette kursus kan stille spørgsmål og kommentere. Bliv medlem her!

  • stig a. siger:

    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

    1. Simon R. siger:

      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

      1. stig a. siger:

        Hej Simon.

        Adressen er pastbin.com/jGW8qyDA

        VH.

        Stig

        1. Simon R. siger:

          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

    2. Simon R. siger:

      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 :)

  • Jessie W. siger:

    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

    1. Simon R. siger:

      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 :)