Taulukko luetteloksi LibreCalcilla?

Liittynyt
10.07.2017
Viestejä
955
Eli pitäisi 8-sarakkeinen taulukko saada helposti luettavaksi rivi-riviltä luetteloksi.

Nyt taulukko on tyyliä:

MyyntiryhmäTyyppiArtistiLevyn nimiJulk. vuosiLevy-yhtiöMyyntihinta-arvioRyhmän hinta
1CDPekkaPekka2031Peräkylä Oy2 €
1CDSimoIskelmä-Simo2025Grammari5 €
1C-kasettiTimoRokki-Timo2020Stratocaster 6666 €
1CDDimoGreatest Shits Ever1991Rockdealer5 €18 €
2CDAbdullah Mohammad MuhammedAlahu Akbar2001Yorker 91149 €
2jne.jne.jne.jne.jne.jne....

Taulukko tulisi saada muotoon:

Myyntiryhmä: 1
CD
Pekka
Pekka
2031
Peräkylä Oy
Tallenteen hinta: 2 €

Myyntiryhmä: 1
(tähän muut samalla tyylillä, kunnes ryhmän viimeinen)
...

Myyntiryhmä: 1
Dimo
Greatest Shits Ever
1991
Rockdealer
Tallenteen hinta: 5 €
Myyntiryhmän hinta: 18 €

Myyntiryhmä 2:
...

Eli siis tulisi saada selväpiirteiseen luettelomuotoon. Kokeilin TOCOL-CHOOSECOLS -komboa jolla ne sai kyllä luetteloon, mutta formaatit katosivat ja lisäksi järjestys oli sekava, esim. formaatittomia numeroita ja niiden välissä ei tyhmää riviä. Käytännössä kun on siis 75-rivinen luettelo, ne tulisi kaikki yksitellen tiirata läpi ja tarkoittaisi moninkertaista, ainakin noin 5-8 kertaa tuon 75 kohtaa käydä manuaalisesti läpi. Kokeilin myös pivottia, mutta sehän vai luo uuden taulukon. Eli jokin automatisoitu keino on oltava olemassa. Makroihin en lähtisi tässä sotkeutumaan, kun en juuri mitään niistä ymmärrä. Kiitokset jo etukäteen avullisista vastauksista! :)
 
Mitä jos vaan generoisit listan pythonilla? Ainakin oma kokemus on se että excelit yms. taulukkolaskentaohjelmat tekee monesta asiasta varsin monimutkaisia ja tehottomia.

Tiedosto csv:ksi:
Koodi:
Myyntiryhmä,Tyyppi,Artisti,Levyn nimi,Julk. vuosi,Levy-yhtiö,Myyntihinta-arvio,Ryhmän hinta
1,CD,Pekka,Pekka,2031,Peräkylä Oy,2 €,
1,CD,Simo,Iskelmä-Simo,2025,Grammari,5 €,
1,C-kasetti,Timo,Rokki-Timo,2020,Stratocaster 666,6 €,
1,CD,Dimo,Greatest Shits Ever,1991,Rockdealer,5 €,18 €
2,CD,Abdullah Mohammad Muhammed,Alahu Akbar,2001,Yorker 911,49 €,
2,jne.,jne.,jne.,jne.,jne.,jne.,...

Muutama rivi pyyttonia:
Python:
import csv

taulukko_csv_path = "taulukko_luetteloksi.csv"

def parsiLuettelo(filepath: str) -> dict:
    luettelodict = {}
    headers = []
    
    with open(filepath) as csvfilee:
        getHeaders = True
        taulukonsisalto = csv.reader(csvfilee, delimiter=",")
        for row in taulukonsisalto:
            if getHeaders:
                getHeaders = False
                headers = row
            else:
                myyntinimike = {}
                myyntiryhma = row[0]

                for i, header in enumerate(headers):
                    if i == 0:
                        if myyntiryhma not in luettelodict:
                            luettelodict[myyntiryhma] = {"myynnit" : [], "ryhman_hinta" : None}
                    elif header == "Ryhmän hinta" and row[i] != "":
                        ryhman_hinta = row[i]
                        luettelodict[myyntiryhma]["ryhman_hinta"] = ryhman_hinta
                    else:
                        myyntinimike.update({header: row[i]})
                luettelodict[myyntiryhma]["myynnit"].append(myyntinimike)
    return luettelodict

def tulostaLuettelo(luettelo: dict):
    for myyntiryhma in luettelo:
        for myynti in luettelo[myyntiryhma]["myynnit"]:
            print(f"Myyntiryhmä: {myyntiryhma}\n{myynti["Tyyppi"]}\n{myynti["Artisti"]}\n{myynti["Levyn nimi"]}\n{myynti["Julk. vuosi"]}\n{myynti["Levy-yhtiö"]}\ntallenteen hinta: {myynti["Myyntihinta-arvio"]}\n")
        print(f"Myyntiryhmän hinta: {luettelo[myyntiryhma]["ryhman_hinta"]}\n\n")
                  

if __name__ == "__main__":
    tassapaseluetteloolisi = {}
    tassapaseluetteloolisi = parsiLuettelo(taulukko_csv_path)
    tulostaLuettelo(tassapaseluetteloolisi)

Tulostuu tämmöstä:

Koodi:
Myyntiryhmä: 1
CD
Pekka
Pekka
2031
Peräkylä Oy
tallenteen hinta: 2 €

Myyntiryhmä: 1
CD
Simo
Iskelmä-Simo
2025
Grammari
tallenteen hinta: 5 €

Myyntiryhmä: 1
C-kasetti
Timo
Rokki-Timo
2020
Stratocaster 666
tallenteen hinta: 6 €

Myyntiryhmä: 1
CD
Dimo
Greatest Shits Ever
1991
Rockdealer
tallenteen hinta: 5 €

Myyntiryhmän hinta: 18 €


Myyntiryhmä: 2
CD
Abdullah Mohammad Muhammed
Alahu Akbar
2001
Yorker 911
tallenteen hinta: 49 €

Myyntiryhmä: 2
jne.
jne.
jne.
jne.
jne.
tallenteen hinta: jne.

Myyntiryhmän hinta: ...
 
@KanOl , on se helppoa kun sen osaa. Tosin mulle ihan hepreää. Joten yritetään pysyä taulukkolaskennassa. Vaikka varmaan on niin, että taulukko-ohjelmien käyttö voi hidastaa just tiedon jalostamista. ;)
 
Eli siis tulisi saada selväpiirteiseen luettelomuotoon. Kokeilin TOCOL-CHOOSECOLS -komboa jolla ne sai kyllä luetteloon, mutta formaatit katosivat ja lisäksi järjestys oli sekava, esim. formaatittomia numeroita ja niiden välissä ei tyhmää riviä. Käytännössä kun on siis 75-rivinen luettelo, ne tulisi kaikki yksitellen tiirata läpi ja tarkoittaisi moninkertaista, ainakin noin 5-8 kertaa tuon 75 kohtaa käydä manuaalisesti läpi. Kokeilin myös pivottia, mutta sehän vai luo uuden taulukon. Eli jokin automatisoitu keino on oltava olemassa. Makroihin en lähtisi tässä sotkeutumaan, kun en juuri mitään niistä ymmärrä. Kiitokset jo etukäteen avullisista vastauksista! :)
Jos johonkin niin juuri tämän tyyppisiin ongelmiin tekoälyt osaavat antaa erinomaisia vastauksia. Kannattaa siis kokeilla esim chatgpt:tä.
 
@KanOl , on se helppoa kun sen osaa. Tosin mulle ihan hepreää. Joten yritetään pysyä taulukkolaskennassa. Vaikka varmaan on niin, että taulukko-ohjelmien käyttö voi hidastaa just tiedon jalostamista. ;)
Rivejä ei kuitenkaan ole kuin nelisenkymmentä, eli kannattaa ehkä kuitenkin vilkaista tarkemmin, koska sieltä saattaa löytyä hyödyllisiä eväitä kun pähkäilet miten saat homman toimimaan taulukkolaskentaohjelmassa.

Suuri etu Pythonin eduksi on siinä että netistä löytyy lähes loputon määrä esimerkkejä, joita hyödyntämällä saa palasen kerrallaan omasta projektista ratkaistua. Lisäksi ChatGPT yms. työkalut osaavat tuottaa selkeästi rajattuihin ongelmiin varsin hyvää koodia. Sama toimii myös toisinpäin, eli sille voi syöttää koodin pätkän ja alkaa kyselemään itselle epäselviä asioita koodiin liittyen. Ongelmasi on vaativuustasoltaan jotain ohjelmoinnin alkeiskurssin perustehtävien luokkaa, joten mistään rakettitieteestä ei ole kyse.

Myös koodin testaus on nykyään tosi vaivatonta, koska esim. Visual Studio codella (tai millä tahansa IDE:llä) voi debugata koodia breakpointteja käyttäen ja samalla voi seurata muuttujien arvoja yms. koodin suoritukseen liittyvää. En ole vuosikausiin kirjoittanut riviäkään makroja taulukkolaskentaohjelmiin vaan juurikin Pythonin käyttö on korvannut sen täysin, koska valmista tulee ihan tosi paljon nopeammin ja hiukset pysyy päässä paremmin.

Jos käytät windowsia niin lataa storesta python3.13 ja visual studio code ja istu tunniksi tai kahdeksi alas ChatGPT luottokumppanina ja kokeile tuleeko ahaa-elämys tuon mun koodin kanssa. Tässä joku ensimmäisten joukossa hakukoneella vastaan tullut ohje koodin debuggauksesta Python in VSCode: Running and Debugging • Python Land Tutorial
;)
 

Statistiikka

Viestiketjuista
290 729
Viestejä
4 975 345
Jäsenet
79 833
Uusin jäsen
Nesmu

Hinta.fi

Back
Ylös Bottom