Calc: Cursor in Zelle

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Calc: Cursor in Zelle

Re: Calc: Cursor in Zelle

von urbarobe » Di, 28.07.2015 08:33

Hallo,

es soll das gedruckt und gespeichert werden, was der Anwender sieht. Der Idealfall wäre gewesen, dass er den Button zwar drücken kann, aber nichts passiert, solange er die Eingabe nicht abgeschlossen hat.

Mittlerweile bin ich auch auf die Commands gestoßen. Hier hatte ich es mit "Deselect" probiert. War aber nicht das Richtige. Der Anwender hat im Druckdialog unter anderem die Möglichkeit, nur die Auswahl zu drucken.

Aber das hier ist der Command, den ich gesucht hatte:
Karolus hat geschrieben:

Code: Alles auswählen

dispatcher.executeDispatch(document, ".uno:Calculate", "", 0, Array())
Danke an alle Beteiligten für die Vorschläge und Denkanstöße :D .

Gruß
Robert

Re: Calc: Cursor in Zelle

von Karolus » Di, 28.07.2015 02:35

Hallo
...genau dass Gegenteil meint...
das könnte ich mir auch vorstellen, als Lösung reicht dann die Aufzeichnung des Tastendrucks auf F9

Code: Alles auswählen

....
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Calculate", "", 0, Array())

....

Re: Calc: Cursor in Zelle

von F3K Total » Mo, 27.07.2015 20:22

Hallo zusammen,
ich könnte mir vorstellen, dass urbarobe genau dass Gegenteil meint, dass eben der eingetippte Wert, wenn vergessen wird, die Eingabetaste zu drücken, trotzdem mit ausgedruckt werden soll.
Das geht, indem man den Cursor z.B. in Zelle A1 zwingt:

Code: Alles auswählen

Sub Drucken
    oSheet = thiscomponent.CurrentController.activeSheet
    oCell = oSheet.getcellbyposition(0,0)
    thiscomponent.CurrentController.select(ocell)
    Dim printProp(0) as New com.sun.star.beans.PropertyValue
    printProp(0).Name = "Wait"
    printProp(0).Value = true
    ThisComponent.Print(printProp())
End Sub
EDIT
Oder besser, zunächst in die Nachbarzelle und dann zurück in die ursprüngliche Zelle:

Code: Alles auswählen

Sub Drucken
    oSheet = thiscomponent.CurrentController.activeSheet
    osel = Thiscomponent.currentselection
    oController = thiscomponent.CurrentController
    if osel.supportsservice("com.sun.star.sheet.SheetCell") then
        nrow = osel.CellAddress.Row
        nColumn = osel.CellAddress.Column
        oCell = oSheet.getcellbyposition(nrow,nColumn + 1)
        oController.select(ocell)
        oController.select(osel)
    endif    
    Dim printProp(0) as New com.sun.star.beans.PropertyValue
    printProp(0).Name = "Wait"
    printProp(0).Value = true
    ThisComponent.Print(printProp())
End Sub
Gruß R

Re: Calc: Cursor in Zelle

von clag » Mo, 27.07.2015 16:03

Hallo urbarobe,

irgendwie kann ich dein Vorhaben nicht vestehen bringt es doch einige Gefahren mit sich,
(wenn die User nicht in der lage sind Enter zu drücken, weiß man wohl auch nicht vorher ob die Eingaben und somit das Ergebnis korrekt ist)
mit so unsicheren Daten die mehr oder weniger zufällig entstehen würde ich nicht arbeiten wollen oder sinnlos Papier bedrucken.

Erziehe den/die User dazu auf Enter zu drücken, dann kann das Ergeniss geprüft und ggf korrigiert werden.


PS
es kann sich ja nur um einen Zelleninhalt handeln da gibt es doch andere Wege eine korrekte
und vollständige Eingabe in die Tabelle zu übernehmen, zB über Gültigkeit oder einen Dialog!?

Re: Calc: Cursor in Zelle

von Stephan » Mo, 27.07.2015 15:59

z.b. das Folgende tut die relevanten Schritte, Drucken ohne Änderungen und Schliessen, die Tatsache das eine Zelle im Edit-Modus ist wird dabei ignoriert, also auch keine Änderung am Zellinhalt gedruckt:

Code: Alles auswählen

sub Main
Dim printProp(0) as New com.sun.star.beans.PropertyValue
printProp(0).Name = "Wait"
printProp(0).Value = true
ThisComponent.Print(printProp())
ThisComponent.Close(True)
end sub
Gruß
Stephan

Re: Calc: Cursor in Zelle

von urbarobe » Mo, 27.07.2015 15:36

Anwendungsfall:

1. Anwender öffnet eine Tabelle
2. Anwender ändert den Wert einer Zelle und schließt dies nicht mit ENTER ab
3. Anwender drückt Button
4. Dialog zum Drucken und Speichern/Schließen der Tabelle erscheint
5. Dokument wird gedruckt und geschlossen
--> Ausdruck ohne Änderung, Tabelle ohne Änderung gespeichert

Re: Calc: Cursor in Zelle

von Stephan » Mo, 27.07.2015 15:30

Meinst Du das Flag manuell setzen, um das Speichern auszulösen?
mutmaßlich doch wohl nein, da dieses Flag zum Speichern per Makro ganz ohne Bedeutung ist.
Nützt nichts. Solange der Cursor noch in der Zelle ist, gibt es die Änderung an der Tabelle nicht.
?
DU SELBST schreibst ein Makro zu dem Du sagst:

"dass ein Makro ausgeführt wird, in dem Änderungen
nur gespeichert werden, wenn auch Änderungen an der Tabelle vorhanden sind"


Wenn das nicht so sein soll, dann schreibe das Makro eben so das auch gespeichert wird wenn es keine Änderungen gibt.

Nö, ich weiß nicht ob das Sinn macht ich weiß nur das Du es augenscheinlich so haben willst, denn sonst würdest Du hier nicht die Eigenschaft "isModified " auswerten sondern ganz einfach speichern wenn Du denn speichern willst (oder nicht speichern wenn Du nicht speichern wilst).


Gruß
Stephan

Re: Calc: Cursor in Zelle

von komma4 » Mo, 27.07.2015 15:22

urbarobe hat geschrieben:Solange der Cursor noch in der Zelle ist, gibt es die Änderung an der Tabelle nicht.
Wenn es keine Änderung ist, dann gibt es auch nichts zu speichern (eine event. Eingabe/Änderung kann durch ESC ja verworfen werden.

Wurde die Zelle durch den gleichen Inhalt "überschrieben" ist das flag gesetzt.
Um diesen Fall abzufangen musst Du gegen eine Kopie vergleichen.

Mir ist der Anwendungsfall noch immer nicht klar.

Re: Calc: Cursor in Zelle

von urbarobe » Mo, 27.07.2015 14:53

@komma4
Meinst Du das Flag manuell setzen, um das Speichern auszulösen?
Nützt nichts. Solange der Cursor noch in der Zelle ist, gibt es die Änderung an der Tabelle nicht.

Gruß
Robert

Re: Calc: Cursor in Zelle

von komma4 » Mo, 27.07.2015 14:28

urbarobe hat geschrieben:dass ein Makro ausgeführt wird, in dem Änderungen
nur gespeichert werden, wenn auch Änderungen an der Tabelle vorhanden sind
Dann verstehe ich wohl den Sinn der Eigenschaft ThisComponent.Modified wohl nicht.

Re: Calc: Cursor in Zelle

von Stephan » Mo, 27.07.2015 10:17

ich habe einen Button in meiner Symbolleiste [...]
[...]
Ich möchte verhindern, dass der Button gedrückt
werden kann, solange die Eingabe in der Zelle ist.
kann ich leider nicht weiterhelfen.
Die Anwendung gibt es auch in MS Excel. Wenn ich mich hier in der Zelle befinde und auf den Button drücke, dann
wird das Makro nicht ausgeführt
Was aber ein Unterschied (=Button gedrückt aber Makro wird nicht ausgeführt) zur obigen Frage (=Button darf nicht gedrückt werden können) ist.

Da es hier nur darauf ankäme das Makro (bzw. einen relevanten Teil des Makros) nicht auszuführen könnte man u.U. indirekt auf den Zustand des Cursors schließen weil der Zelleditmodus meiner Ansicht nach nur über Doppelklick oder Taste F2 erreichbar ist und Beides könnte man detektieren.


Gruß
Stephan
Dateianhänge
Demo-Tastatur-und-Doppelklick-überwachen.ods
(11.59 KiB) 187-mal heruntergeladen

Re: Calc: Cursor in Zelle

von urbarobe » Mo, 27.07.2015 09:44

Hallo,

ich habe einen Button in meiner Symbolleiste, der dazu führt, dass ein Makro ausgeführt wird, in dem Änderungen
nur gespeichert werden, wenn auch Änderungen an der Tabelle vorhanden sind. Solange aber die Eingabe in der
Zelle ist, gibt es keine Änderung (Flag isModified ist nicht gesetzt). Ich möchte verhindern, dass der Button gedrückt
werden kann, solange die Eingabe in der Zelle ist.

Die Anwendung gibt es auch in MS Excel. Wenn ich mich hier in der Zelle befinde und auf den Button drücke, dann
wird das Makro nicht ausgeführt solange sich die Eingabe in der Zelle befindet. Das musste ich nicht programmieren.

Gruß
Robert

Re: Calc: Cursor in Zelle

von Stephan » Fr, 24.07.2015 20:50

ich finde hier:
https://forum.openoffice.org/en/forum/v ... 18#p340196

einen Code der sich augenscheinlich eignet die gewünschte Info zu bekommen, mir ist das aber zu kompliziert das weiter zu verfolgen ehe nicht klar ist wofür das überhaupt benötigt wird.

Gruß
Stephan

Re: Calc: Cursor in Zelle

von komma4 » Fr, 24.07.2015 17:11

Ist mir in meiner Karriere als Programmierer noch nicht untergekommen, dass dieser Fall genutzt werden kann (oder: muss).

Wozu brauchst Du das?

Calc: Cursor in Zelle

von urbarobe » Fr, 24.07.2015 11:15

Hallo,

wie kann ich feststellen, dass sich der Cursor in einer Zelle befindet (Cursor blinkt)?

Gruß
Robert

Nach oben