"Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

FraWie
**
Beiträge: 46
Registriert: So, 12.04.2020 18:37

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von FraWie »

Moin!

Danke für die Antwort.

Wir habe eine Evolution in diesem Threat durchgemacht.

Von: "wie bekomme ich eine Spalte formatfrei"

Hin zu: "Eine existierende Auswahl woanders formatfrei einfügen."

Zwischenschritte waren durch Deine Fragen bedingt, z.B.:
Meine sonstigen Makros, die am Ende das Gewünschte einbinden werden.

Jetzt kommen wieder Fragen auf:
Wo kommen die Daten her, sollte das nicht ein Makro machen,
stehen die Daten in einer XLS-Datei, sollen die in der Spalte unter "Grade" eingefügt werden usw...

Aber da sind wir doch lange von weg evolutioniert.

JA, ich werde den neuen Code tagtäglich nutzen.
So, wie ich derzeit tagtäglich zig-mal meinen
dispatcher.executeDispatch(document_Werte_einfuegen, ".uno:InsertContents", "", 0, argsPasteT())
nutze, der aber die dämlichen Formate mit kopiert.

Und zwar nutzen als "Standalone-Makro" oder als kleine Prozedur, die von meinen Makros aufgerufen wird.

Aber all diese Fragen sind aus meiner Sicht doch unerheblich für die Problemlösung von

"Eine existierende Auswahl woanders formatfrei einfügen."

Wenn die Originaldaten aber seltsam formatiert sind, dann kann das Ergebnis doch nicht das Gewünschte sein.
Hast Du meinen Dreizeiler ausprobiert?
Tabelle = ThisComponent.Sheets().getByName("Tabelle1")
Daten_Zu_Kopieren = Tabelle.getCellRangeByName("A1:A10").getDataArray()
Tabelle.getCellRangeByName("C1:C10").setDataArray(Daten_Zu_Kopieren)
Bei mir fügt er AUSSCHLIESSLICH die Inhalte ein.
In den neuen Zellen bleiben alle vorhandenen Farben, Schriftarten usw. erhalten,
dafür verschwinden diese komischen Apostrophe, Ziffern werden zu Ziffern und Buchstaben zu Buchstaben.
Dieser Dreizeiler entspricht EXAKT dem letzten Teil von:
"Bereich markieren"
Strg + "c"
und dann an beliebiger Stelle rechte Maustaste und "Inhalte einfügen" / Unformatierter Text / Spalte markieren / Spaltentyp = "Text"
Aber, er ist eben nicht variabel. :( :( :(

Das andere war Deine Frage:
Was möchtest du davon per Makro erledigen?
Die Punkte 1 und 3 musst du mit Maus machen. Um Punkt 2 mit Makro zu machen, müsstest du es starten
Hmmm... Ich habe doch geschrieben:
1. Ich markiere mit der Maus einen Beliebigen Bereich ("E5:E30" ODER "F1:G15" oder oder oder)
2. Ich "Zwischenspeichere" diesen Bereich irgendwo (Bisher mit Strg + "C" in die Zwischenablage)
3. Ich setze den Cursor mit der Maus in eine beliebige Zelle (z.B. "D12")

4. Und jetzt soll ein Makro die reinen Daten so in der selben "Zellenstruktur" einfügen,
. .wie sie war aber eben relativ zur neuen Position.
Bedeutet: Das Markieren und Kopieren 1 bis 3 wird manuell gemacht.
Oder inenrhalb meiner anderen Makros oder wie auch immer.
Es ist irgendetwas ausgewählt + in die Zwischenablage kopiert und der Cursor woanders platziert worden.
Soweit okay.

Den Schritt 2 habe ich nur etwas aufgelockert, weil Du die Zwischenablage so verteufelt hast und ich Dir
hier alle Freiheiten lassen wollte. Das heisst aber nicht, dass hier ein Makro hin muss. Ich mache es ja
mit der Zischenablage. Du hast hier völlig freie Hand, wie Du das zuvor Markierte ausliest.
Es sollten aber keine zwei Makros sein, die nacheinander mit Unterbrechung aufgerufen werden müssen.

Jetzt mal praktisch:
Nimm doch mal die Maus und markiere "A1:A10"
und dann drücke Strg + c und dann setze die Maus mit einem links-Klick auf "B20"
Jetzt sind die Schritte 1- 3 erledigt.

Und dann kommt Schritt 4 und da kommst Du ins Spiel: Und jetzt soll ein Makro...

Ich weiss nicht, wie ich es noch deutlicher schreiben soll ???

Mein Dispatcher macht genau das - aber mit kopieren der Formate...
Mein Dreizeiler kopiert exakt NUR die Inhalte, ist aber nicht variabel.

Wie bekommen wir die beiden gewollten Eigenschaften kombiniert?!?

Wie gesagt, es gibt tausend Fragen zu exatkt diesem Thema aber keine Antwort.
Du könntest hier also die Goldmedaille und einen Platz auf der ewigen Bestenliste gewinnen!!!

Bitte hilf mir!!!
:lol:
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von Stephan »

Wie gesagt, es gibt tausend Fragen zu exatkt diesem Thema
Bitte verlinke nur 5 davon. Ich glaube Deine Behauptung nämlich nicht.
Jetzt mal praktisch:
Nimm doch mal die Maus und markiere "A1:A10"
und dann drücke Strg + c und dann setze die Maus mit einem links-Klick auf "B20"
Jetzt sind die Schritte 1- 3 erledigt.

Und dann kommt Schritt 4 und da kommst Du ins Spiel: Und jetzt soll ein Makro...

Ich weiss nicht, wie ich es noch deutlicher schreiben soll ???

Mein Dispatcher macht genau das - aber mit kopieren der Formate...
dann musst Du das richtig aufzeichnen:

Code: Alles auswählen

sub Main
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(5) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Flags"
args1(0).Value = "SVDFN"
args1(1).Name = "FormulaCommand"
args1(1).Value = 0
args1(2).Name = "SkipEmptyCells"
args1(2).Value = false
args1(3).Name = "Transpose"
args1(3).Value = false
args1(4).Name = "AsLink"
args1(4).Value = false
args1(5).Name = "MoveMode"
args1(5).Value = 4

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

end sub


Gruß
Stephan
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von mikeleb »

Hallo,
damit nur die Texte, Zahlen sowie Datum und Uhrzeit eingefügt werden braucht es nur die Flags "SVD".

Code: Alles auswählen

sub Main
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(5) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Flags"
args1(0).Value = "SVD"
args1(1).Name = "FormulaCommand"
args1(1).Value = 0
args1(2).Name = "SkipEmptyCells"
args1(2).Value = false
args1(3).Name = "Transpose"
args1(3).Value = false
args1(4).Name = "AsLink"
args1(4).Value = false
args1(5).Name = "MoveMode"
args1(5).Value = 4

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

end sub
Das sollte aber längst klar sein. Ich bin aber davon ausgegangen, dass es aber dein Problem nicht löst. Daher ein anderer Ansatz.
Ich Kopiere die aus einer anderen Datei und füge sie dann mit dem Makro ein.

Und alle reinen Ziffernfolgen, also ohne Zeichen dabei, bekommen ein Apostroph vorangestellt
ist mir jetzt aufgefallen...
Genau dieses Problem wird durch "Inhalte einfügen ..." eben nicht gelöst.
Gruß,
mikeleb
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von Stephan »

Genau dieses Problem wird durch "Inhalte einfügen ..." eben nicht gelöst.
Da das 'dispatcher-Makro' eine aktive Selektion hinterlässt, könnte man es zweckmäßigerweise hierzu am Ende um folgende Code-Zeile ergänzen:

Code: Alles auswählen

ThisComponent.getCurrentselection.setFormulaArray(ThisComponent.getCurrentselection.getDataArray())
(bitte FormulaArray vs. DataArray beachten)


Sollte das, in den Augen des Threadstarters, die Lösung sein, so erwarte ich keine Medaillien, sondern weiterhin eine Antwort auf meine Bitte:

"Bitte verlinke nur 5 davon. Ich glaube Deine Behauptung nämlich nicht."


Gruß
Stephan
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von mikeleb »

Hallo,
da ein Beispiel meist mehr sagt als tausend Worte: Anbei mal eine Datei mit Makro, dass beispielhaft alle Daten von der Tabelle2 (unterhalb der Zelle mit dem Wort "GRADE") ohne Formatierungen in die Spalte A der Tabelle1 überträgt.
Dabei ist völlig variabel wo die Zelle mit "GRADE" sich genau befindet und wie groß der Datenbereich darunter ist.
Bei jedem Klick auf die Schaltfläche erfolgt eine weitere Übertragung.
Dateianhänge
Spalten Formatieren mit Text in Spalten - Makro2.ods
(10.92 KiB) 71-mal heruntergeladen
Gruß,
mikeleb
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von mikeleb »

Hallo,
@Stephan: Das Problem, dass ich sehe, ist, dass, wenn in der Quelldatei Zahlen als Text formatiert sind (per Apostroph), sowohl Inhalte einfügen ... als auch .getDataArray diese weiterhin als Text behandeln.
Damit wären wir wieder beim Anfang der Fragestellung, dass zwei Zellen, die scheinbar gleich sind, eben doch nicht gleich sind.
Im meiner letzen Beispieldatei habe ich dieses Problem noch nicht angefasst, weil ich mich zunächst mit dem Rest irgendwie verständlich machen wollte.
Gruß,
mikeleb
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von Stephan »

Hallo mikeleb,
Das Problem, dass ich sehe, ist, dass, wenn in der Quelldatei Zahlen als Text formatiert sind (per Apostroph), sowohl Inhalte einfügen ... als auch .getDataArray diese weiterhin als Text behandeln.
Ja, so hatte ich Deine Bedenken auch verstzanden, deshalb das Einfügen mittels .setFormulaArray, was die Apostrophe entfernt.





Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von Stephan »

Damit wären wir wieder beim Anfang der Fragestellung, dass zwei Zellen, die scheinbar gleich sind, eben doch nicht gleich sind.
Im meiner letzen Beispieldatei habe ich dieses Problem noch nicht angefasst, weil ich mich zunächst mit dem Rest irgendwie verständlich machen wollte.
Wenn ich meine Makrozeile, die .setFormulaArray beinhaltet, auf die Beispielswerte in A1 und A2 der DAtei "Spalten Formatieren mit Text in Spalten - als Makro realisieren.ods" anwende, dann funktioniert das (bzw. funktioniert hinterher die Vrergleichsformel).
Ob das verlässlioch immer funktioniert ist mir nicht klar, denn das Verhalten der 2 Zellen in der Beispieldatei ist ja etwas mehrkwürdig. (Ja, ich habe DEine UNtersuchung des XML gelesen, allein ist es merkwürdig das in der DAtei, wenn sie normal in Calc geöffnet ist, nichts zu sehen ist.)

Gruß
Stephan
FraWie
**
Beiträge: 46
Registriert: So, 12.04.2020 18:37

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von FraWie »

Ihr Lieben,

eins vorneweg: ich finde das großartig, welchen Einsatz ihr hier zeigt!

Und wenn ich manchmal ungehalten erscheine, dann entschuldige ich mich dafür.
Das geht ausschließlich gegen mich, weil ich mich so unverstanden fühle und an
meiner eigenen Ausdrucksweise zweifel.

So, das musste sein.


@Stephan:
dann musst Du das richtig aufzeichnen:
Vielen Dank für das neue Makro.
Es ist ja im Prinzip mein Makro, was ich im täglichen Einsatz habe und macht exakt das,
was mein Makro macht:
Es kopiert bestimmte Formatierungen mit.

Bitte probiere es an meiner Beispieldatei aus:

Werte_Einfuegen.ods
(12.04 KiB) 68-mal heruntergeladen

Markiere Die Zellen A7 bis A9, kopiere sie mit Strg + "c",
positioniere den Curser zum Beispiel im Feld C3 mit einem Linksklick
und starte Dein "richtig aufgezeichnetes Makro".

Du wirst dann in der Zelle C5 die lustige Formatierung " '4510 " wiederfinden, wie sie in Zelle
A9 auch vorliegt.

Und um dieses Problem dreht sich hier alles.

(Um eins draufzusetzen: Zelle A1 ist ungleich Zelle A2 - auch wenn es nicht so aussieht.
Mit deinem neuen Makro kopiert, bekommt es auf einmal auch ein Apostroph, wo so noch keins zusehen ist...)

"Bitte verlinke nur 5 davon. Ich glaube Deine Behauptung nämlich nicht."
Die 5 Beispiel-Links werde ich heraussuchen und in meiner nächsten Nachricht posten.


@mikleb:
Genau dieses Problem wird durch "Inhalte einfügen ..." eben nicht gelöst.
DOCH !
Probiere es doch bitte einfach einmal aus in meiner obigen Beispieldatei:

Markiere Die Zellen A7 bis A9, kopiere sie mit Strg + "c",
positioniere den Curser zum Beispiel im Feld C3 mit einem Linksklick
Dann Strg+Alt+Umschalt+V
Dann unten die Spalte wo "Standard" steht klicken
Erst jetzt kann man darüber den Spaltentyp "Text" auswählen.
Dann auf "OK"

Und siehe da, das Apsotroph ist verschwunden!
Mit dem Zellinhalt kann auch gerechnet werden, es ist also kein reiner Text, der da jetzt steht.


Vielen Dank für deine Bespieldatei!
Aber leider geht sie ja auch wieder von zwei falschen weil fixen Vorraussetzungen aus, die ich
immer wieder versuche zu erklären:

Du gehst wieder davon aus, dass etwas an einer BESTIMMTEN STELLE STEHT, nämlich "unter Grade".

Und dann packst Du es an eine BESTIMMTE STELLE, nämlich Du fügst es ans Daten-Ende der Spalte A an.

Beides soll aber so nicht sein, sondern:

-> Daten Ursprung variabel, da mit dem Cursor beliebig ausgewählte und markierte Zellen
-> Einfügen an einer neuen Stelle, wo der Cursor gerade neu psoitioniert wurde.


Kurz zurück zu meinem letzten Post. Dort hatte ich einen Dreizeiler, der es genau alles richtig macht,
und "nur noch" variabel in diesem Sinne gemacht werden muss. Vielleicht hilft das?

:-)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von Stephan »

Es kopiert bestimmte Formatierungen mit.
DEFINITIV nein.
Du wirst dann in der Zelle C5 die lustige Formatierung " '4510 " wiederfinden
das ist KEINE Formatierung.

Im Übrigen hatte ich bereits geschrieben das das nicht passiert wenn Du am Ende des Makros die zusätzliche Zeile:

Code: Alles auswählen

ThisComponent.getCurrentselection.setFormulaArray(ThisComponent.getCurrentselection.getDataArray())
einfügst.
Und um dieses Problem dreht sich hier alles.
dann besteht das Problem nicht mehr, denn die ERgänzung benannter Code-Zeile beseitigt es.

GRuß
Stephan
FraWie
**
Beiträge: 46
Registriert: So, 12.04.2020 18:37

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von FraWie »

Unglaublich, es scheint zu funktionieren.

Ich hatte die neue Codezeile als eigenständig angesehen und nicht einfach
dahinter gepackt.

Und um ehrlich zu sein, wenn ich diese Zeile lese, sehe ich absolut keinen Sinn
darin. Was, bitte, steht da ?

Bin sprachlos...

Tausend Dank!

Damit wäre wirklich ein "Standardproblem" gelöst!
--> Die 5 Links schicke ich noch nach, vielleicht auch ein paar mehr...!!!
Sobald ich Zeit finde...

Und die goldene Medaille gibts selbstverständlich auch noch obendrauf!
:lol:
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von Stephan »

Und um ehrlich zu sein, wenn ich diese Zeile lese, sehe ich absolut keinen Sinn
darin. Was, bitte, steht da ?
Das Du die Zellwerte formal als Formeln einfügen sollst, was eben dazu führt das die Hochkommas verschwinden. Das Ganze klappt auch nur deshalb zuverlässig weil die Werte als .getDataArray gelesen werden.
--> Die 5 Links schicke ich noch nach, vielleicht auch ein paar mehr...!!!
Sobald ich Zeit finde...
Diese Zeit solltest Du schnellstens finden, denn ich halte das Ganze für eine unbelegte Behauptung.


Stephan
FraWie
**
Beiträge: 46
Registriert: So, 12.04.2020 18:37

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von FraWie »

Hohoho

Was genau regt Dich so auf?

Ich denke, ich nehme mir Zeit und liefere Qualität ab, anstatt
jetzt einfach die nächst besten Links zu kopieren.

Ich habe jetzt über Wochen das Netz danach durchforstet.
Mir ist dabei schwindelig geworden.

Ich wäre hier bestimmt nicht diesen Marathon gelaufen, wenn
es an jeder Ecke so mal eben zu finden ist.

Komisch, meine Beobachtung war bislang in solchen Foren, dass die Fragesteller
ausfallend werden...
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von mikeleb »

Hallo,
Probiere es doch bitte einfach einmal aus in meiner obigen Beispieldatei:

Markiere Die Zellen A7 bis A9, kopiere sie mit Strg + "c",
positioniere den Curser zum Beispiel im Feld C3 mit einem Linksklick
Dann Strg+Alt+Umschalt+V
Dann unten die Spalte wo "Standard" steht klicken
Erst jetzt kann man darüber den Spaltentyp "Text" auswählen.
Dann auf "OK"

Und siehe da, das Apsotroph ist verschwunden!
Mit dem Zellinhalt kann auch gerechnet werden, es ist also kein reiner Text, der da jetzt steht.
Auch wenn Calc damit rechnen kann, ist es trotzdem Text. Du kannst ja mal danach den Bereich C3:C5 sortieren lassen. Du wirst feststellen, dass die 4510 als Text sortiert werden.
Erst, wenn man nach dem Inhalte einfügen ... (was bereits seit Freitag klar war, wie es per Makro geht!) noch eine Bereinigung der Apostrophe durchführt (z. B. mit Stephans genialer Codezeile) hast du das gewünschte Ergebnis.
Du gehst wieder davon aus, dass etwas an einer BESTIMMTEN STELLE STEHT, nämlich "unter Grade".
So hast du es in deinem Post am Fr, 12.02.2021 16:30 formuliert. Ich habe jetzt (!) verstanden, dass du dir ein universelles Makro nur für das Einfügen wünschst.
Wenn das spezielle Apostroph-Problem nicht da ist, sehe ich allerdings keine Notwendigkeit für so ein Makro, da dich das Inhalte einfügen ... nur eine Tastenkombination kostet.
Gruß,
mikeleb
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren

Beitrag von Stephan »

Was genau regt Dich so auf?
Das Du, meiner Meinung nach, die Unwahrheit sprichst.
Ich denke, ich nehme mir Zeit und liefere Qualität ab, anstatt
jetzt einfach die nächst besten Links zu kopieren.
Ich denke nicht das es darum geht jetzt nachträglich qualitativ hochwertige Links zu posten, sondern es sollte darum gehen das Du die Linkls postest die Du ja angeblich schon besucht haben musst, um das zu behaupoten, was Du behauptest, und die also in der History DEines Browseers stehen sollten.



Gruß
Stephan
Antworten