Payprus Tabellenkalkulation ohne Programmierkenntnisse mit KI nutzen

Wie man ohne Programmierkenntnisse die Tabellenkalkulation von Papyrus nutzen kann gezeigt am Beispiel „Umwandlung von Integer Zahlen in Römische Zahlen“ :

  1. ChatGPT wird dazu ein PDF des Kapitels 22 des Handbuches und folgender Prompt übergeben:

Schreibe für die Papyrus Tabellenkalkulation Code, der eine in einem Feld eingegebene Integerzahl in einem anderen Feld als Römische Zahl ausgibt. Gebe an, in welchem Feld der Code platziert werden muss. Schreibe den Code mit konsistenter Einrückung und klarer Klammerung sowie Kommentar. Alles Wissenswerte über die Papyrus Tabellenkalkulation findest du im beigelegten PDF!

  1. Es wird von ChatGPT zurückgegeben:
Denke nach…
Dokumente werden gelesen

Erstellen einer Formel für römische Zahlen

Um die Zahl in römische Zahlen umzuwandeln, brauchen wir eine verschachtelte 
IF-Formel, zum Beispiel für den Bereich 1 bis 3999. Wir verwenden TRUNC, FLOOR 
und MOD, um die restlichen Werte zu berechnen, da Papyrus keine LET-Funktion 
unterstützt. Wenn der Wert ungültig ist, geben wir »Ungültig« aus.

Formel für römische Zahlen unter Papyrus

Papyrus bietet eine Syntax wie IF-Bedingungen (IF, THEN, ELSE) und CONCAT für die 
String-Verkettung. Die Formel kann stark verschachtelt sein, und ich werde CONCAT 
bevorzugen, da es string-sicherer ist als direkte Verkettung mit »+«. Die MOD-, TRUNC- 
und FLOOR-Funktionen unterstützen das Berechnen von Römischen Zahlen.

Nachgedacht für 22s

Fertig

Feld	Inhalt
A1	    Eingabe der Integerzahl
B1	    Rechenfeld mit der Formel für die römische Zahl

Setze B1 als Rechenfeld und trage dort diese Formel ein:

IF INVALID(A1) OR A1 < 1 OR A1 > 3999 THEN
  'Ungültig'
ELSE

  /* Tausender */
  (
    IF TRUNC(A1 / 1000) >= 1 THEN
      REPEAT('M', TRUNC(A1 / 1000))
    ELSE
      ''
    ENDIF
  )

  +

  /* Hunderter */
  (
    IF TRUNC((A1 MOD 1000) / 100) = 9 THEN
      'CM'
    ELSE
      IF TRUNC((A1 MOD 1000) / 100) >= 5 THEN
        'D' + REPEAT('C', TRUNC((A1 MOD 1000) / 100) - 5)
      ELSE
        IF TRUNC((A1 MOD 1000) / 100) = 4 THEN
          'CD'
        ELSE
          REPEAT('C', TRUNC((A1 MOD 1000) / 100))
        ENDIF
      ENDIF
    ENDIF
  )

  +

  /* Zehner */
  (
    IF TRUNC((A1 MOD 100) / 10) = 9 THEN
      'XC'
    ELSE
      IF TRUNC((A1 MOD 100) / 10) >= 5 THEN
        'L' + REPEAT('X', TRUNC((A1 MOD 100) / 10) - 5)
      ELSE
        IF TRUNC((A1 MOD 100) / 10) = 4 THEN
          'XL'
        ELSE
          REPEAT('X', TRUNC((A1 MOD 100) / 10))
        ENDIF
      ENDIF
    ENDIF
  )

  +

  /* Einer */
  (
    IF (A1 MOD 10) = 9 THEN
      'IX'
    ELSE
      IF (A1 MOD 10) >= 5 THEN
        'V' + REPEAT('I', (A1 MOD 10) - 5)
      ELSE
        IF (A1 MOD 10) = 4 THEN
          'IV'
        ELSE
          REPEAT('I', A1 MOD 10)
        ENDIF
      ENDIF
    ENDIF
  )

ENDIF

Die Formel ist für den Standardbereich 1 bis 3999 gebaut. 
Das ist sinnvoll, weil klassische römische Zahlen darüber hinaus in der Regel 
Sondernotationen brauchen.

Anmerkung: Interessanterweise hat die KI doch kein CONCAT benutzt, was bei Verschachtelungen teilweise schlecht machbar ist.

Umwandlung Integer Zahlen in Römische Zahlen.pap (11,2 KB)

1 „Gefällt mir“

Krass! Als Lektüre hast du ihm das Papyrus-Handbuch als PDF vorgelegt?
Ich hab mich mit ChatGPT noch kaum beschäftigt. Braucht man dafür ein Abo oder geht das bei ersten Versuchen auch ohne?

Ich betreibe „Vibe Coding“ (= Man lässt die AI den Großteil des Codes schreiben und steuert nur grob die Richtung) schon seit knapp 2 Jahren. Viele Standardaufgaben kann man selbst gar nicht so schnell tippen wie die AI nach einem kurzen Prompt den Code bereitstellt.

Es wurde nur das Kapitel 22 aus dem Handbuch als PDF mit dem Prompt mitgegeben.

Das Beispiel wurde sowohl mit ChatGPT als auch mit GEMINI ausprobiert. Bei beiden lief der Code nicht auf Anhieb, weil das PDF aus dem Handbuch von der AI nicht genau genug „gelesen“ wurde. Es reichte aber die Angabe der Fehlermeldung und der korrigierte Code funktionierte . Antwort war z.B. bei GEMINI: Die Fehlermeldung „nur Wert, öffnende Klammer oder Funktion“ tritt in der Papyrus-Tabellenkalkulation auf, weil der Formel-Interpreter nach einem Pluszeichen (+) direkt einen Operanden (einen Wert oder eine Funktion) erwartet. Da IF als Schlüsselwort für eine Bedingung gewertet wird, „stolpert“ der Interpreter darüber, wenn es mitten in einer Kette von Additionen steht. Die Lösung steckt im PDF-Hinweis zu 1.2.8: „Verschachteltes IF/THEN … sollte man klammern“. Indem wir die IF-Blöcke in Klammern setzen, erfüllen wir die Bedingung der Fehlermeldung („öffnende Klammer“) und die Logik funktioniert.

Beide AI sind kostenlos, man muss sich aber anmelden und hat nur einen begrenztes Budget an Prompts im Monat (Ich hoffe, das stimmt noch … Ich bin schon lange angemeldet …) Größere Projekte kann man deshalb nur mit Abo betreiben, das macht man dann aber sowieso direkt in einer IDE (z.B. Visual Studio Code-kostenlos).

GEMINI hat übrigens als Korrektur der obigen Fehlermeldung eine interessante - sehr kurze Version! - für das Problem geliefert:

/* Umwandlung von A1 in römische Ziffern ohne IF-Anweisungen */

REPEAT('M', TRUNC(A1 / 1000)) + // Tausender (M)

TRIM(SUBSTRING(
    '    C   CC  CCC CD  D   DC  DCC DCCC CM  ', 
    TRUNC((A1 MOD 1000) / 100) * 4 + 1, 
    4
)) + // Hunderter

TRIM(SUBSTRING(
    '    X   XX  XXX XL  L   LX  LXX LXXX XC  ', 
    TRUNC((A1 MOD 100) / 10) * 4 + 1, 
    4
)) + // Zehner

TRIM(SUBSTRING(
    '    I   II  III IV  V   VI  VII VIIIIX  ', 
    (A1 MOD 10) * 4 + 1, 
    4
)) // Einer

So funktioniert diese Lösung:

  • Der „Nachschlage“-String: Jeder Block (z. B. für die Einer I, II, III…) ist exakt 4 Zeichen lang (aufgefüllt mit Leerzeichen).
  • Die Berechnung des Startpunkts: Wir nehmen die Ziffer der jeweiligen Stelle (0 bis 9), multiplizieren sie mit 4 und addieren 1.
    • Beispiel Einer: Ist die Ziffer eine 4, rechnet die Formel 4 * 4 + 1 = 17. An Position 17 im String steht IV .
  • SUBSTRING(..., start, 4): Schneidet genau diesen 4-Zeichen-Block aus.
  • TRIM(...): Entfernt die überflüssigen Leerzeichen am Rand, damit z. B. aus IV einfach IV wird.
  • + (Verkettung): Fügt die Ergebnisse der Tausender, Hunderter, Zehner und Einer nahtlos zu einer einzigen römischen Zahl zusammen.

Die Erklärung wird mit dem Code geliefert!

Es lohnt sich also manchmal nachzufragen, ob es noch einen andere Möglichkeit für das Coding gibt!