Zellinhalt komplett in Absatz kopieren (gelöst)

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: Zellinhalt komplett in Absatz kopieren (gelöst)

Re: Zellinhalt komplett in Absatz kopieren

von clag » Mi, 22.09.2010 05:14

Hi Leutz,

ich hatte zwar gehofft die Kenner und Könner kommentieren meine Lösung irgendwie
aber da es keine kritischen Anmerkungen gibt, denke ich jetzt einmal es ist so nicht ganz falsch
und ich setze das Thema auf gelöst

Danke, Allen die so beharrlich geholfen

Re: Zellinhalt komplett in Absatz kopieren

von clag » Di, 21.09.2010 09:04

Hallo Leutz und Gern und Viel-Helfer

Heute kann ich mich ein klein wenig revanchieren

Ich habe eine Lösung für das beschriebene Problem gefunden :D

nachdem ich noch etliche Versuche unternommen hatte mit anderem Code das Problem zu lösen, hatte ich heute morgen die richtige Eingebung.
Diese eine Zeile am Anfang des Makro genügt

thisComponent.CurrentController.Frame.containerWindow.setFocus()

und schon ist die Welt in Ordnung !

Das war eine sehr langwierige und nervenaufreibende Prozedur um zu dieser Erkenntnis zu gelangen,
um so mehr freut es mich es jetzt gelöst zu haben, vielleicht nutzt es dem einen oder andern hier im Forum auch noch.

einen schönen Tag noch

Re: Zellinhalt komplett in Absatz kopieren

von clag » Mo, 20.09.2010 18:56

Hallo Karo,

ruft man das Makro aus der Menü/Symbolleiste heraus auf sieht es so aus als würde das Makro korrekt ablaufen, allerdings tut sich ein neues Problem auf.
Bei 9 Versuchen ist OO 5x in die Angststarre verfallen jedenfalls rührte sich nach dem Durchlauf des Makro nichts mehr und ich musste den Taskmanager bemühen um OOo beenden zu können ....

Das ist schon echt komisch immerzu irgendwas neues ........

Re: Zellinhalt komplett in Absatz kopieren

von Karolus » Mo, 20.09.2010 18:22

Hallo
Ich schrieb bereits:
  • Teste doch mal versuchsweise einen Aufruf über die Symbolleiste ( → Extras → Anpassen →"Symbolleiste"....)

Möchtest du das evtl. probieren ?

Karo

Re: Zellinhalt komplett in Absatz kopieren

von clag » Mo, 20.09.2010 18:05

Hi Karo,

die Variante mit loslassen der Maustaste über dem Dokument, ist im Moment die einzige die überhaupt das Makro korrekt ablaufen lässt !
Karolus hat geschrieben:Dein Makro benutzt u.a. CurrentSelection , ViewCursor ect., das legt den Schluss nahe das die Tatsächliche Selektion ( der Button ? ) querschiesst.
da kann ich Zurzeit nur die Namen von lesen und aussprechen aber wie das funktional richtig eingesetzt wird und ob überhaupt nötig entzieht sich meinem bescheidenen Basic Wissen,
ich hoffe du oder ihr könnt da mit Ratschlägen konkreter werden .....

Ich hatte schon versucht das Makro durch ein anderes Makro aufzurufen welches ein "wait 500" vorweg hatte,
hat aber nicht gebracht der Ablauf war genauso als hätte ich das Makro direkt per Button gestartet :?

kann man den Cursor denn nicht per Code in das Dokument zwingen ? und während des Ablauf die Oberfläche lahmlegen, wäre jetzt meine nächste Idee !?


edit und PS
da dieser Code eigentlich nicht separat laufen sollte sondern Teil eines umfangreicheren Makros ist, könnt ich noch prüfen ob es in Folge anderen Codes vielleicht fehlerfrei abläuft, bisher hatte ich immer die Einzelnen Module einzeln erzeugt und dann dem Ganzen hinzugefügt

Re: Zellinhalt komplett in Absatz kopieren

von Karolus » Mo, 20.09.2010 17:21

Hallo
Dein Makro benutzt u.a. CurrentSelection , ViewCursor ect., das legt den Schluss nahe das die Tatsächliche Selektion ( der Button ? ) querschiesst.
Teste doch mal versuchsweise einen Aufruf über die Symbolleiste ( → Extras → Anpassen →"Symbolleiste"....)
Evtl. hilft es wenn der Focus ganz aus der Dokumentenoberfläche raus genommen wird ?
über dem Button die Maustaste loslassen führt zum Fehler,
Gegenfrage: Warum lässt du die Maustaste überhaupt los, bevor das Makro fertig ist ?

Gruß Karo

Re: Zellinhalt komplett in Absatz kopieren

von clag » Mo, 20.09.2010 16:54

Hallo Leutz, Hallo Karo,


So, jetzt hab ich das Schwein erwischt ! :lol:

nur habe ich noch keine Ahnung wie ich die Sau erlegen kann :(

und ich kann jetzt ganz klar den Fehler reproduzieren oder auch nicht, ohne etwas am Code ändern zu müssen
Meine erste Vermutung das es mit dem Cursor zu tun hat bestätigt sich, das Szenario ist auch eindeutig nachstellbar

Es hängt doch indirekt mit den Buttons zusammen aber hauptsächlich wohl mit dem Focusverlust

Die Idee folgendes zu prüfen kam mir nachdem mehrfach das Makro einwandfrei lief wenn es über das Menü aufgerufen wurde.
Ich habe jetzt die Button auf den Trigger "Maustaste loslassen" eingestellt und damit etwas versucht was direkt zur Erkenntnis geführt hat.

Wenn man den Mauszeiger über die Button stellt und drückt und loslässt kommt es zu den beschriebenen Fehlern
die übrigens unterschiedlich im Ergebnis sind, mal fehlt alles mal nur ein Teil des bewegten Inhalts

Wenn man nun den Mauszeiger über den Button setzt und drückt, und gedrückt haltend wieder vom Button über das Dokument zieht und erst dort loslässt, dann wird das Makro komplett und richtig ausgeführt egal ob mit eingebauten, TünnefCode, Wait, Print oder nur der benötigte Code !
Ich habe s mit verschiedenen Varianten des Code Versucht immer das absolut gleiche Verhalten,
über dem Button die Maustaste loslassen führt zum Fehler,
über dem Dokument die Maustaste loslassen führt zum korrekten Ablauf des Makro !
ebenso das Ausführen über das Menü


Jetzt ist die große Frage wie kann man dieses merkwürdige Verhalten von OO im Code korrigieren und für welche anderen Merkwürdigkeiten ist das noch der Anlass ?

Ich hoffe ihr könnt mir da helfen, ich baue auf euch ! , :D

die Such nach dem Fehler hat mich schon ziemlich genervt :-x

Re: Zellinhalt komplett in Absatz kopieren

von Karolus » Mo, 20.09.2010 14:44

Hallo
Eine kleine Anregung hätte ich noch, es gibt für selektierte Writertabellen : → Tabelle → Umwandeln → Tabelle in Text
Das kann man doch Aufzeichnen:

Code: Alles auswählen

sub tabellen_sel

Tabelle = thiscomponent.texttables().getbyindex(0)
control = thiscomponent.currentcontroller()

control.select( Tabelle )

table_to_text

end sub

'####___ Start Aufzeichnung____'######

sub table_to_Text
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Delimiter"
args1(0).Value = CHR$(9)   '###__Tabulator-taste

dispatcher.executeDispatch(document, ".uno:ConvertTableToText", "", 0, args1())

end sub

'#####___Ende der Aufzeichnung____#####
Oben drüber noch etwas Testcode zum selektieren einer Tabelle

Gruß Karo

Re: Zellinhalt komplett in Absatz kopieren

von clag » Mo, 20.09.2010 14:24

Hallo Karolus,

da hast du natürlich schon recht gedrückt ist gedrückt, losgelassen ist losgelassen, basta !
aber nur weil ich den Fuß auf das Bremspedal lege muss nicht gleich eine Vollbremsung erfolgen .....

Das Thema soll aber jetzt nicht zu einer Diskussion führen weil nicht relevant für die Problem, glaube ich jedenfalls

In der Zwischenzeit habe ich mit Enum etwas neuen Code aufgebaut und da zeigt sich das gleiche Verhalten :(

jetzt habe ich den Fehler soweit eingekreist um sagen zu können, es gibt irgendwelche Unstimmigkeiten beim einlesen in die Zwischenablage.

Code: Alles auswählen

'print " Hallo ich bin es, dein Makro ! "
'msgBox " pups "
testshit = testshit+1

        oDispatch.executeDispatch(oDocframe, ".uno:Copy", "", 0, Array())
wenn nur eine der unsinnigen Codezeilen vor dem CopyZeile augeführt wird funktioniert alles
und der Inhalt wir in die Zwischenablage übernommen, dann ist auch das Trigger-Ereigniss am Button egal ......
ohne den Tünnef vorher bleib die Zwischenablage leer !

Aber es kann wohl kaum im Sinne des Erfinders sein, wenn man irgendwelchen Tünnef in den Code einbauen muss damit er richtig funktioniert.

Da würde ich schon gern herausfinden was da schief läuft !

Re: Zellinhalt komplett in Absatz kopieren

von Karolus » Mo, 20.09.2010 13:53

Hallo
Das Ereignis "Maustaste gedrückt" ist doch eigentlich klar definiert.
...und dabei bemerkt, dass die beiden Maustastenereignissen "gedrückt" bzw "loslassen" so eine Art Falle sind, weil nicht korrigierbar, wenn sie erst einmal einmal anvisiert sind erfolgt unwiderruflich der Makroaufruf.
Das glaubt dir jetzt nicht mal dein Friseur !
( Wenn ich beim Nachbarn auf den Klingelknopf drücke möchte ich daß es klingelt - Punkt )

Im übrigen habe ich genauso viel oder wenig Erfahrung mit dem spezifischen Eigenarten von Schaltflächenereignissen wie du auch, daher musst du das im Zweifelsfalle ausprobieren.

Gruß Karo

Re: Zellinhalt komplett in Absatz kopieren

von clag » Mo, 20.09.2010 10:25

Hallo Karo,

die Freude über das funktionieren währte nicht lange !

nach dem ich begonnen hatte mein Hauptdokument/ später Vorlage abzuändern stellte sich plötzlich wieder die Fehlfunktion ein
nachdem ich begonnen hatte dem Cursor vor dem kopieren weitere Formate mitzugeben.
Das entfernen der entsprechenden Zeilen führte aber nicht dazu dies Verhalten zu revidieren.

Darauf habe ich die Beispieldatei geladen mit der ich vorher ja fest gestellt hatte so geht es tut es die jetzt auch nicht mehr,
auch ein kompletter Neustart des Rechner ändert nichts daran allerdings funktionert es noch wenn ich über das Menü Extras Makro Verwalten ausführen das Makro aufrufe !

Aber mein weiterarbeiten an dieser Vorlage ist jetzt erst mal wieder Unsinn solange ich nicht weiß wie ich diesen Makroteil aufrufen kann damit er ordentlich ausgeführt wird.
Ich krieg echt nen Rohr dabei :twisted:

ist natürlich nicht deine/eure Schuld

Ich hoffe eben nur das einer von Euch Erfahrenen mir helfen kann das merkwürdige Verhalten des Makro unter Kontrolle zu kriegen,
ich bin da im Moment völlig überfordert und vor allem gnatzig auf dieses bescheidene Verhalten und ich komme mir echt gefilmt vor ....
In dem ganzen Projekt und drumherum stecken schon viele Tage/Wochen Kopfzerbrechen und etliche Lösungsideen aus diesem Forum.

In Hoffnung

Re: Zellinhalt komplett in Absatz kopieren

von clag » Mo, 20.09.2010 07:23

Hallo Karolus,

allerbesten Dank ! damit du erlöst du mich von meiner Pein :D


aber leider nur sehr kurzfristig denn sofort drängen sich mir gleich mehrere Nachfragen auf .............

1. warum ist das so ? wieso spielt es eine so gravierende Rolle wie ein Makro aufgerufen wird und vor allem welcher Sinn steckt dahinter ?

2. ich hatte die verschiedenen Ereignisse/Auslöse-Möglichkeiten in den Eigenschaften der Schaltflächen in der Vergangenheit durchprobiert und dabei bemerkt, dass die beiden Maustastenereignissen "gedrückt" bzw "loslassen" so eine Art Falle sind, weil nicht korrigierbar, wenn sie erst einmal einmal anvisiert sind erfolgt unwiderruflich der Makroaufruf.

Hingegen verhält sich der Button bei "Aktion ausführen" wie für einen Button in Windows üblich.
Der Funktions-trigger erfolgt erst beim lösen der Taste und wenn man bei bereits gedrückter Maustaste bemerkt man möchte doch nicht die Funktion starten (was bei mir recht häufig vorkommt), dann kann man bei gedrückter Maustaste die Buttonfläche verlassen und die Maustaste wieder loslassen ohne das die dem Button verknüpfte Funktion gestartet wird.

Dieses Verhalten ist der Grund warum ich bisher immer "Aktion ausführen" verwendet habe, die Maustasten-trigger führten immer wieder zu versehentlichen Fehlbedienung :(

Ich wäre im Leben nicht darauf gekommen das hier ein Zusammenhang besteht, weil ich auf Grund des Verhaltens "Aktion ausführen" für den normalen Standard-trigger gehalten habe.

Nun wäre es sehr hilfreich wenn man herausbekommen könnte warum es bei "Aktion ausführen" diese Fehlfunktion gibt damit man das mit Code abfangen kann,
oder überlegen wie man bei den Mausklick-Trigger etwas korrigieren könnte ?

Ich hoffe da hat jemand den Durchblick wieso/warum es so ist und erklärt es hier einmal oder kennt eine Quelle wo man nach lesen könnte,
eine Greenhorn geeignete Ausführung wäre mir da besonders lieb :)

einen relaxten Wochenanfang .......

Re: Zellinhalt komplett in Absatz kopieren

von Karolus » Mo, 20.09.2010 05:47

Hallo
in folgender Form funktioniert das ohne "print" und "wait" allerdings hab ich die Verknüpfung auf das Ereigniss Maustaste gedrückt der Schaltfläche geändert.

Code: Alles auswählen

Option Explicit
Sub changetab2text_new1 ' korrigiert von Karolus

Dim oDoc as Object, oTable as Object, oCurs as Object, mytextCursor as Object, oPar as Object
Dim myViewCursor as Object, myCell as Object, oDispatch as Object, oDocframe as Object

Dim CellString as String
Dim oText 'Wird nirgends benutzt !!
Dim Anzahl as Integer, Anzahl2 as Integer, i as Integer 'Benutzt du die irgendwo wirklich?

oDoc = Thiscomponent
oCurs = oDoc.getCurrentController().getViewCursor()
oDispatch = createUnoService("com.sun.star.frame.DispatchHelper")
oDocframe = oDoc.CurrentController.Frame

Anzahl = oDoc.getTextTables().getCount

for i = Anzahl -1 to 0 step -1

    oTable = oDoc.getTextTables().getByIndex( i )
    myCell = oTable.getCellByPosition(1,0)
'   myCell = oTable.getCellByName("B1")
    CellString = myCell.string

    if CellString ="next Page " then 
        myCell.string = "ENDE" 
        odoc.getCurrentController().select(mycell)
        oCurs.gotoEnd(true)
        oCurs.CharColor = 12910603
        goto nextstep1
    end if


    oDoc.getCurrentController().select(mycell)
    oCurs.gotoEnd(true)
    oCurs.CharColor = 12910603
    oCurs.ParaLeftMargin = 499
    oCurs.ParaRightMargin = 499

	nextstep1:
    oDispatch.executeDispatch(oDocframe, ".uno:Copy", "", 0, Array())
    oCurs.gotoStart(True)
    oCurs.goleft(1,False)
    oTable.dispose

    oDoc.Text.insertControlCharacter(oCurs,com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, false)
    oDispatch.executeDispatch(oDocframe, ".uno:Paste", "", 0, Array())

next

print " Fertig ! "

End Sub
Gruß Karo

Re: Zellinhalt komplett in Absatz kopieren

von clag » Mo, 20.09.2010 00:12

Hi Leutz,

hier ein halbwegs neutrales Beispiel mit dem BasicCode und start-buttons
vielleicht kann wer erkennen was da schief geht ?
ich denke es hängt irgendwie mit dem Cursor zusammen ...........
wie könnte man nach dem löschen der Tabelle den Cursor wieder
an die Stelle setzen wo die Tabelle gelöscht wurde ?
Tabelle2Text_test_1.odt
(110.25 KiB) 34-mal heruntergeladen

Re: Zellinhalt komplett in Absatz kopieren

von clag » So, 19.09.2010 22:57

n'Abend Leutz ,Hallo Karolus,

erst einmal Danke für deine Aktion

die
for i = 0 to Anzahl -1
Schleife musste ich wieder ein bauen damit es über alle Bereiche des Dokument läuft
aber das war nicht so schwierig...

leider verhält sich der von dir geänderte Code genauso mit den eingebauten print funktioniert es,
mit den Wait nicht dann wir eine Tabelle nach der anderen in dem Dokument eliminiert !

wobei vorher noch kurz der eingefügte Text zu sehne ist dann aber wieder verschwindet :twisted:

ich werde dann mal das Dokument und mit dem Code hochladen

Nach oben