Re: alternierende Füllung ( Zeilen oder Spalte)

Hallo Thomas.

Am 05.09.2007 um 10:21 schrieb Thomas Kaegi:

Die Formel in Zelle L1 lautet (natürlich ohne Zeilenumbruch):
SetzeBereichFüllung(A1:K1;Wahl(1+(Zeile>1)+IstGerade(Zeile);$M$1&'e Füllung';$M$1&'25';'Standardfüllung'))


Jetzt muss ich mich doch noch mal dazu melden.
Eigentlich hatte ich gedacht, ich komme mit Deiner Formel soweit klar, um sie dann nach meinen individuellen Bedürfnissen zu nutzen.
Doch das hat nicht so ganz funktioniert.

Zwei Fragen noch direkt zu Deiner Formel:
Wofür steht «...&'e Füllung'» und was bewirkt dann die «…&'25'»

Denn leider bekomme ich es nicht hin, dass ich mit Deiner Formel selbst definierte Füllungen aufrufen kann. Wenn ich jedoch die Füllung "Rot" in Zelle M1 eingeben, funktioniert dass Einfärben.


Ich habe jetzt noch mal einen anderen Gedankengang zu dem ich einfach mal ein paar Details erkläre.
Zunächst darf sich meine alternierende Füllung nicht über die ganze Spaltenhöhe erstrecken, sondern darf erst mit der fünften Zeile anfangen.
Dazu schreibe ich jetzt einfach den Bereich in dem eine Füllung gesetzt werden soll ganz fest: "A5:H100"

Als nächstes habe ich dann drei Füllungen definiert
"türkis100", "türkis020", "türkis010"

Wobei die "türkis100" nur als Basisfarbe gedient hat.


Nun habe ich folgende, ganz einfache Formel in Zelle "N1" geschrieben
SetzeBereichFüllung(A$5:H$100;Wahl(IstUngerade(Zeile);'türkis020'))
Das Ergebnis war, dass mein definierter Bereich (A5:H100) durchgehend mit "türkis020" eingefärbt war. 
Kopiere ich die Zelle nun entsprechend nach unten, bekomme ich in jeder zweiten, also gerade Zeilen-Zelle ein "NV" als Ergebnis.

Nun setzte ich die Formel in Zelle "O1" und ändere die Formel von «IstUnGerade» auf «IstGerade» und ändere zusätzlich die Farbe auf "türkis010".
SetzeBereichFüllung(A$5:H$100;Wahl(IstGerade(Zeile);'türkis010'))
Jetzt ist jeweils in der ersten Zeilen-Zelle ein "NV" als Ergebnis und der definierte Bereich, der eingefärbt werden soll wird komplett mit der neuen Farbe gefüllt.


Daraus stellt sich nun folgende weiter Überlegung. Kann man hier nicht evtl. mit einer Wenn Funktion weiter kommen?
«Wenn, gewählte Zeile gleich gerade Zeilennummer dann setze Füllung Typ-A - Wenn gewählte Zeile gleich ungerade Zeilennr. dann setze Füllung Typ-B».


Was ich jetzt aber noch erreichen will ist, dass die Funktion sozusagen permanent auch ausgeführt wird.
Anders, als andere Rechenformeln, muss der Befehl "SetzeBereicheFüllung" z.B. immer wieder Händisch aktiviert werden, damit er seine Aufgaben abarbeitet, z.B. mit einen Knopf. Gibt es eine Möglichkeit die Funktion immer wieder automatisch zu reanimieren?
So dass auch ein unbeabsichtigtes Zuweisen eine anderen Füllung einfach wieder überschrieben wird.


Noch eine Bemerkung zur Lösung mit AppleScript. So wie ich es verstehe, muss man dann immer wieder manuell das Script an das einzelne Rechenblatt anpassen und starten. Ist zwar auch irgendwie eine coole Lösung aber auch nicht wirklich praktikabel. Mit einer entsprechenden Formel im Rechenblatt, stelle ich mir übrigens auch vor, dass die alternierende Füllung sich dynamisch anpasst, sobald man eine oder mehrere Zeilen einfügt.


Mich würde mal interessieren, welche Lösungen da seitens den Entwicklern von Ragtime angeboten werden?
Oder ist dort die Anwendung alternierender Füllungen als solches völlig unbekannt? 


 Vielen Dank für weitere Hilfen und Anregungen.




Mit freundlichen Grüße,
Andreas (Appletiser)



 






Re: alternierende Füllung ( Zeilen oder Spalte)

#6849 On 10 September, 2007 09:23 Thomas Kaegi said,

Hallo Andreas

Zuerst mal zu deiner Forderung, die alternierende Einfärbung der Zeilen müsse dynamisch erfolgen. Die Lösung ohne AppleScript, die ich dir am 5. September im Thema "alternierende Füllung (Zeilen oder Spalte)" geliefert habe, macht genau das.

Das Problem bei diesem Vorgehen ist aber, dass diese Formel nicht automatisch in neu eingefügte Zeilen kopiert wird. Die Wahrscheinlichkeit, diesen Schritt nach dem Einfügen einer neuen Zeile zu vergessen, ist relativ hoch. Eine andere Lösung wäre, das AppleScript immer wieder automatisch auszulösen. Wenn du aber zusiehst, wie lange die Ausführung dieses Scripts braucht, wenn es schon nur über 20 Zeilen läuft, dann wird sofort klar, dass diese Lösung nicht praktikabel ist. Die Auslösung des Skripts mit einem Knopf oder einem Tastaturkürzel (welches dem Skript zugeordnet wird) ist somit zweckmässig. Du musst dich für das eine oder das andere "Übel" entscheiden.

>> Die Formel in Zelle L1 lautet:
>> SetzeBereichFüllung(A1:K1;Wahl(1+(Zeile>1)+IstGerade(Zeile);$M$1&'e Füllung';$M$1&'25';'Standardfüllung'))

> Jetzt muss ich mich doch noch mal dazu melden.
> Eigentlich hatte ich gedacht, ich komme mit Deiner Formel soweit klar, um sie dann nach meinen individuellen Bedürfnissen zu nutzen.
> Doch das hat nicht so ganz funktioniert.

> Zwei Fragen noch direkt zu Deiner Formel:
> Wofür steht «...&'e Füllung'» und was bewirkt dann die «…&'25'»

Ich hatte als Voraussetzung erwähnt, dass du die Füllvorlagen "Rot25", "Blau25" udn "Grün25" definieren müssest. In RagTime sind grundsätzlich die Füllvorlagen "Rote Füllung", "Blaue Füllung", "Grüne Füllung" definiert. Ich habe weiter gesagt, dass in Zelle M1 die gewünschte Farbe angegeben werden müsse, also "Rot", "Blau", "Grün". Die Operation "$M$1&'e Füllung'" ergibt somit je nach Inhalt von Zelle M1 den Namen einer der vordefinierten Füllungen, während die Operation "$M$1&'25'" den Namen der selbst definierten Füllvorlage mit 25% Dichte ergibt, also z.B. wenn M1="Rot", "Rote Füllung", bzw. "Rot25".

> Denn leider bekomme ich es nicht hin, dass ich mit Deiner Formel selbst definierte Füllungen aufrufen kann. Wenn ich jedoch die Füllung "Rot" in Zelle M1 eingeben, funktioniert dass Einfärben.

Wenn bei dir die Füllungen "türkis020" und "türkis010" alternieren sollen und die Füllung erst ab Zeile 5 beginnen soll, dann heisst deshalb die Formel in Zelle L1 natürlich anders:
SetzeBereichFüllung(A1:K1;Wahl(1+(Zeile≥5)+((Zeile≥5)*IstGerade(Zeile));'Standardfüllung';'türkis020';'türkis010'))

Du wirst bemerken, dass die Formel gegenüber der Lösung vom 5. September ergänzt und umgestellt ist. Mehr dazu später.

Genau wie im AppleScript musst du auch diese Formel deinen Bedürfnissen anpassen:
Wenn in einem anderen Rechenblatt "rosa" statt "türkis" gefragt ist, müssen die entsprechenden Füllvorlagen definiert sein und die Namen der aufgerufenen Füllvorlagen in der Formel angepasst werden. Wenn die erste zu markierende Zeile nicht Zeile 5 ist, so muss dieser Wert in der Formel angepasst werden. Oder du machst es wie ich zuerst vorgeschlagen habe: In einer Hilfszelle (in meinem Beispiel in Zelle M1) schreibst du z.B. "türkis" und in einer zweiten Hilfszelle (N1) schreibst du die Zeile, bei der die Markierung beginnen soll. Die benötigten Füllvorlagen mit den entsprechenden Namen musst du aber trotzdem definieren. Dann heisst die Formel:
SetzeBereichFüllung(A1:K1;Wahl(1+((Zeile≥$N$1)*(1+IstGerade(Zeile)));'Standardfüllung';$M$1&'020';$M$1&'010'))

> Ich habe jetzt noch mal einen anderen Gedankengang zu dem ich einfach mal ein paar Details erkläre.
> Zunächst darf sich meine alternierende Füllung nicht über die ganze Spaltenhöhe erstrecken, sondern darf erst mit der fünften Zeile anfangen.
> Dazu schreibe ich jetzt einfach den Bereich in dem eine Füllung gesetzt werden soll ganz fest: "A5:H100"

> Als nächstes habe ich dann drei Füllungen definiert: "türkis100", "türkis020", "türkis010", wobei die "türkis100" nur als Basisfarbe gedient hat.

> Nun habe ich folgende, ganz einfache Formel in Zelle "N1" geschrieben
> SetzeBereichFüllung(A$5:H$100;Wahl(IstUngerade(Zeile);'türkis020'))
"Wahl" setzt voraus, dass das erste angegebenen Attribut verschiedene Werte (n) annehmen kann, begonnen bei 1. Je nach Wert des Attributes liefert "Wahl" dann den n-ten Wert der folgenden Serie von Werten. Du hast gleich doppelt gesündigt: Erstens kann dein "Wahl-Attribut" auch den Wert 0 annehmen, was unzulässig ist, und zweitens hast du nur einen einzigen Wert angegeben. "Wahl" kann also gar nicht wählen und wird deshalb immer den angegebenen Wert liefern.

Weshalb habe ich die Formel umgestellt? Weil du eben erst ab der x-ten Zeile mit der Markierung beginnen willst. Natürlich könntest du die Formel auch einfach erst ab der 5. Zeile einsetzen. Aber hier geht es ja um das Verständnis der Formel. Schau das "Wahl-Attribut" in meiner obigen ersten Formel an:
1+((Zeile≥$N$1)*(1+IstGerade(Zeile)))
Immer wenn die Zeilennummer kleiner ist als der Wert in N1 liefert dies Formel den Wert 1 und die Wahl-Funktion wählt deshalb den ersten unter den folgenden Werten aus, also "Standardfüllung". Ist die Zeilennummer grösser als der Wert in N1 kommt 1 (ungerade Zeilen) oder 2 (gerade Zeilen) dazu. Der ganze Ausdruck nimmt also alternierend die Werte 2 und 3 an und entsprechend werden die Füllvorlagen aus der Liste ausgewählt.

> Daraus stellt sich nun folgende weitere Überlegung. Kann man hier nicht evtl. mit einer Wenn Funktion weiter kommen?
> «Wenn, gewählte Zeile gleich gerade Zeilennummer dann setze Füllung Typ-A - Wenn gewählte Zeile gleich ungerade Zeilennr. dann setze Füllung Typ-B».
Das ist genau, was meine Formel macht, nur nicht mit "Wenn", sondern mit "Wahl", weil es eben drei verschiedene Möglichkeiten gibt und nicht nur zwei.

> Was ich jetzt aber noch erreichen will ist, dass die Funktion sozusagen permanent auch ausgeführt wird.
> Anders als andere Rechenformeln, muss der Befehl "SetzeBereicheFüllung" z.B. immer wieder Händisch aktiviert werden, damit er seine Aufgaben abarbeitet, z.B. mit einen Knopf. Gibt es eine Möglichkeit die Funktion immer wieder automatisch zu reanimieren?
Siehe meine Bemerkung ganz am Anfang: Bei der hier diskutierten Lösung wird leicht vergessen, die Formel in eine neu eingefügte Zeile einzusetzen. Alle anderen passen sich an, aber die neue Zeile hat ja keine Formel für die Füllung. Bei der Lösung mit AppleScript stellt sich die Frage, wie häufig das Skript ausgeführt werden soll, damit es nicht stört (natürlich lässt es sich in fixen Abständen ausführen). Und wie soll sichergestellt werden, dass nach dem Einfügen einer Zeile das Dokument nicht gedruckt wird, bevor das Skript das nächste Mal ausgeführt wurde?

Die einzige Lösung, die mir einfällt und die all deine Bedürfnisse abdeckt, setzt die MetaFormel-Funktionen voraus. Dort könnte die Anzahl Zeilen der Tabelle überwacht werden (vorausgesetzt das Ende der Tabelle lässt sich formelmässig erfassen) und nach jedem Ändern der Tabellenlänge eine einzige Formel für die Zuweisung der Füllvorlagen ausgeführt werden.

> Noch eine Bemerkung zur Lösung mit AppleScript. So wie ich es verstehe, muss man dann immer wieder manuell das Script an das einzelne Rechenblatt anpassen und starten.
Wie oben erläutert, kommst du auch nicht darum herum, die Formel anzupassen, wenn du in einer anderen Tabelle "rosa" statt "türkis" haben möchtest, die Tabelle bei einer anderen Zeile beginnt oder aufhört. Im AppleScript kannst du (wie in der Formel), die Werte aus bestimmten Zellen in des Skript einlesen, statt das Skript anzupassen - natürlich müssen dann die Zeilen am Anfang des Skripts so angepasst werden, dass sie diese Werte aus der Tabelle entnehmen. Ausserdem kommst du nicht darum herum, die Füllvorlagen zu definieren. Na ja - natürlich könnte das AppleScript auch noch so geschrieben werden, dass die Farben aus in der Tabelle anzugebenden RGB-Werten gemischt würden. Aber das sprengt den Rahmen des Forums.

> Mich würde mal interessieren, welche Lösungen da seitens den Entwicklern von Ragtime angeboten werden?
> Oder ist dort die Anwendung alternierender Füllungen als solches völlig unbekannt?

Das wäre wohl ein Wunsch für einen Ausbau von Martin's Power Functions. Deine Problemschilderung zeigt aber, dass wohl jeder Anwender andere Parameter für die Markierung wünschen würde. Deshalb hat RagTime - wenigstens bis heute - keine "vorgestrickte" Lösung. Für solche Probleme gibt es die Musterlösungen im Forum. Dort habe ich jetzt die Lösung mit dem AppleScript publiziert. Andere Lösungen sind immer willkommen. Wenn jemand eine bessere Lösung vorschlägt als ich, so freut mich das. Auch ich kann immer wieder Anregungen brauchen.

Mit freundlichem Gruss
Thomas