Oldal: 1 / 1

szótár kártya készítése calcban

Elküldve: 2023. június 1., csütörtök 20:01
Szerző: Grumike
Sziasztok!

va egy elképzelésem amit szeretnék megvalósítani libreoffice calcban:
Van 2 db munkafüzet munkalapom:
Az első neve: "Szavak". Ebben az "A" oszlopban angol szavak, "B" oszlopban a magyar megfelelői vannak (szimpla szótár).
A második neve: "Daily challenge"
A daily challenge munkalap "A1" cellájába egy függvény véletleszerűen kiír egy angol szót a "Szavak" munkalapon található "A" oszlop szavaiból. A "B1" cellába én írom a megoldást.
Ha a Magyar szópár nem egyezik meg a "Szavak" munkafüzetben található szópárral, akkor a "C1" cellába piros szöveggel a "helytelen" szó jelenik meg.
Ha a szópár egyezik a "Szavak" munkafüzetben található szópárral, akkor a "C1" cellába zöld szöveggel a "helyes" szó jelenik meg.

Ehhez valamicskét konyítok (ámátőr szinten), de sajnos többszöri próbálkozásra sem sikerült. Illetve "működik, de nem csinál semmit. Ime:

Kód: Egész kijelölése

=INDEX('Szavak’!A:A; VÉLETLEN.KÖZÖTT(1, DARAB2(Szavak!A:A)), 1)
Hol lehet a hiba?

Illetve még próbálkoztam libreoffice basic-el, de ahhoz végkép süket vagyok. Interneten nézegettem lehetőségeket, és összetákoltam valamit, de itt se fut le semmi. Ime:

Kód: Egész kijelölése

Sub DailyChallenge()
    Dim szavakSheet As Object
    Dim dailyChallengeSheet As Object
    Dim lastRow As Long
    Dim randomIndex As Integer
    Dim randomWord As String
    
    ' Az "Szavak" munkalap hivatkozása
    szavakSheet = ThisComponent.Sheets.getByName("Szavak")
    
    ' A "Daily Challenge" munkalap hivatkozása
    dailyChallengeSheet = ThisComponent.Sheets.getByName("Daily Challenge")
    
    ' Az "Szavak" munkalap utolsó nem üres sorának meghatározása az "A" oszlopban
    lastRow = szavakSheet.getCellRangeByName("A1").getDataArray().getLength(0)
    
    ' Ellenőrizze, hogy van-e legalább egy szó az "Szavak" munkalapon
    If lastRow > 0 Then
        ' Véletlenszerű index generálása
        Randomize
        randomIndex = Int((lastRow - 1 + 1) * Rnd + 1)
        
        ' Véletlenszerűen kiválasztott angol szó meghatározása
        randomWord = szavakSheet.getCellByPosition(0, randomIndex).getString()
        
        ' Angol szó megjelenítése a "Daily Challenge" munkalap "A1" cellájában
        dailyChallengeSheet.getCellByPosition(0, 0).setString(randomWord)
    End If
End Sub
Esetleg valakinek ötlete, hogy mit kéne módosítanom, hogy meg tudjam valósítani az elképzelésemet?

Előre is köszi a válaszokat.

Re: szótár kártya készítése calcban

Elküldve: 2023. június 1., csütörtök 20:13
Szerző: Zizi64
Részinformációk helyett a inkább komplett fájlt küld be a beágyazott makrókkal együtt. (ha túl nagy a szótár, töröld egy részét. 128 KiB a limit itt a fórumon.)

Re: szótár kártya készítése calcban

Elküldve: 2023. június 1., csütörtök 21:06
Szerző: Grumike
Íme:
szótár_be.ods
(9.31 KiB) Letöltve 70 alkalommal.

Re: szótár kártya készítése calcban

Elküldve: 2023. június 2., péntek 5:57
Szerző: Zizi64

Kód: Egész kijelölése

=INDEX('Szavak’!A:A; VÉLETLEN.KÖZÖTT(1, DARAB2(Szavak!A:A)), 1)
Nem írtál semmilyen képletet a második Sheet-re...

Első meglátások:
  • A felkiáltójel az Excelben szokásos elválasztójel a képletekben. A LibreOffice pontot használ. Ha csak az ide feltöltött fájlod ODF formátumú, akkor első tippem: az éles fájlodhoz is ODF fájlformátumot használj!. Nem létezik 100%-os kompatibilitás a különböző fájlformátumok között. (Soha nem is volt, soha nem is lesz!)
  • A LibreOffice-ban nem célszerű teljes oszlopra hivatkozni (A:A), mert a több, mint egymillió lehetséges sor kezelése a keresőfüggvényekkel nagyon lelassíthatja a folyamatot. Használj nevezett tartományokat:
    Akkor nem kell a képletbe írnod a Sheet nevét se, és csak ott keres, ahol találhat is.

Re: szótár kártya készítése calcban

Elküldve: 2023. június 2., péntek 20:47
Szerző: Zizi64
A megoldási javaslaton túl némi finomítás is van a mellékelt fájlban.
  • Mindig használd az "Option Explicit" kapcsolót. Az IDE olyankor szólni tud, ha elírtál egy változónevet, vagy olyat akarsz használni, amit még nem deklaráltál.
  • Célszerű kikapcsolni a kisbetű/nagybetű megkülönböztetést magában a Calc-ban, vagy a kiértékelés során a makróban MINDKÉT adatot nagy-, vagy kisbetűsre váltani).
  • Ahogy már írtam, célszerű használni a nevezett cellákat és tartományokat. A neveket mind a cellaképletekben, mind a feltételes formázásban használhatod.
  • Telepíts egy objektumvizsgáló kiterjesztést. (XrayTool vagy MRI ) Nagyon megkönnyíti a programozást, az iszonyatosan nagy méretű, sok elemű API használatát. Én a kódban - kiREMelve (' xray ...) az XrayToolt használtam, hogy megtudjam, hogy az adott programozási objektum milyen tulajdonságokkal és metódusokkal rendelkezik. (így tudtam meg, hogy a nevezett cellatartománynak hogy érhetem el a sorainak a számát.
  • A nevezett tartományba anélkül tudsz új sorokat szúrni, hogy kézzel módosítanod kéne a tartományhatárokat. De mindig csak pontosan annyi sor legyen a nevezett tartományban, mint amennyi adatod van.
szótár_be_Zizi64.ods
(14.79 KiB) Letöltve 76 alkalommal.

Re: szótár kártya készítése calcban

Elküldve: 2023. június 9., péntek 8:47
Szerző: Zizi64
Nos? Sikerült valamennyit segíteni?