"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 »

Ha - Volltreffer:

Die Ursprngsdeti ist eine vermutlich von SAP erzeugte XLSX Datei und da sind die Apostrophe schon vorhanden
bei den Zahlen.

Also nehme ich Dein erstes Makro und lasse es doch vorweg einfach laufen.

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

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

Beitrag von FraWie »

Sorry, ich nochmal.

Alles zurück:

Das geniale kleine Makro von Dir ändert ja auch alle vorhandenen
Formatierungen.
Das ist leider kontraproduktiv.


Habe nochmal nachgeschaut:

Es liegt wirklich daran, dass ich mit meinem "Werte_einfuegen"-Makro
die vorhandenen Apostrophe (und damit die auch die Formatierungen) mit einfüge.

Wenn ich händisch die Werte einfüge (rechte Maustaste - Inhalte einfügen - Unformatierter Text)
geht ja wieder dasselbe Importfenster auf wie bei "Text in Spalte".
Wenn ich dann da wieder die Spalte auswähle und als Spaltentyp "Text" auswähle, ist alles okay.

Genau dieses

"Nur unformatierten Text einfügen"
-aus einer bestehenden Markierung
-an die aktuelle Cursor-Position

bräuchte ich, dann wäre alles "erschlagen".

Idee?
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,
ändert ja auch alle vorhandenen Formatierungen. Das ist leider kontraproduktiv.
Deswegen ja die Formatvorlage, die du nach einen Wünschen anpassen kannst.
Das Makro ließe sich auch nur auf eine Zellbereich (die neuen Daten) anwenden.
Mit

Code: Alles auswählen

ocell.clearcontents(32) 
würde nur harte Formatierungen entfernt.
Wenn ich händisch die Werte einfüge
Warum nicht gleich per Makro? Wenn schon automatisieren ...
Geht es immer um dieselbe Datei? Ist eindeutig welcher Zellbereich kopiert werden muss? Gib mal ein Beispiel.
Die Variante
sub KopieUndInsertDaten
dim aData()
dim oTab as variant, oBereich as Variant, oZielbereich as Variant
oTab = thisComponent.sheets(0)
oBereich = oTab.getCellRangeByName("A1:A15")
aData = oBereich.getDataArray()
oZielbereich = oTab.getCellRangeByName("D1:D15")
oZielbereich.setDataArray(aData)
end sub
wäre absolut geeignet. Nur müsste klar sein, woher die Daten genommen werden sollen. Wenn die Zellen in der xlsx-Datei händisch kopiert werden, enthalten sie alle möglichen Formatierungen. Das aufzufdröseln ...
Noch eine Idee: Die Daten (auch mit Formatierungen) auf eine extra Tabelle einfügen, dann mein Makro 'drüberjagen zum säubern und dann per .getDataArray und .setDataArray an die richtige Stelle bringen.
Gruß,
mikeleb
FraWie
**
Beiträge: 46
Registriert: So, 12.04.2020 18:37

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

Beitrag von FraWie »

Warum nicht gleich per Makro? Wenn schon automatisieren ...
Ja, ich bitte darum!!!
:lol:
Nur müsste klar sein, woher die Daten genommen werden sollen.
Ich versuche nochmal mein Problem an der Sache zu beschreiben:

Die Daten stammen aus einer Spalte in einer XLS Datei. Soweit richtig.

Aber die Anzahl und die genaue Position der Zellen kann jedesmal variieren.
Ich markiere daher die gewünschten Zellen und verbringe sie mit <Strg> + "c"
in die Zwischenablage. (Ist das dasselbe wie clipboard?)

Daher funktioniert dieses hier auch nicht, da ja fix:

oBereich = oTab.getCellRangeByName("A1:A15")
aData = oBereich.getDataArray()


Ebenso möchte ich diesen Inhalt der Zwischenablage an und unter einer neuen Position des
Cursors einfügen. Daher funktioniert das hier nicht:

oZielbereich = oTab.getCellRangeByName("D1:D15")
oZielbereich.setDataArray(aData)


Wie kann ich also die beiden Zeilen wie beschrieben variabel halten?

:?

Es müsste "nur" das, was ich weiter oben als "händisch funtioniert es" beschrieben habe,
in ein Makro verfrachtet zu 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,
Die Daten stammen aus einer Spalte in einer XLS Datei.
Die Spalte ist bestimmt festgelegt. Ist der Dateiname auch festgelegt? xls oder xlsx?

Code: Alles auswählen

Ich markiere daher die gewünschten Zellen 
Ist das automatisierbar? Sprich: Woran erkennst du, welche Zellen es sein müssen?
Gruß,
mikeleb
FraWie
**
Beiträge: 46
Registriert: So, 12.04.2020 18:37

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

Beitrag von FraWie »

Die Spalte ist bestimmt festgelegt. Ist der Dateiname auch festgelegt? xls oder xlsx?
Ich markiere daher die gewünschten Zellen
Ist das automatisierbar? Sprich: Woran erkennst du, welche Zellen es sein müssen?
Hmm... Verstehe die Fragen nicht...

Ich markiere z.B eine Anzahl von Zellen händisch.
Dann mit Strg + c in die Zwischenablage.
Und dann jetzt brauche ich ein Makro für: Ausspucken an einer beliebigen Stelle, wo ich den Cursor hin geparkt habe.

Der Dateiname spielt doch gar keine Rolle. Es ist irgendeine geöffnete beliebige ODS-Datei.

Das Ausspucken läuft dann in einer ODS.
In ODS kopiere ich mir ja auch diese falschen Formatierungen mit meine kleinen Makro
( s.o. ... dispatcher.executeDispatch(DOC, ".uno:InsertContents", "", 0, argsPasteT() )
hin und her und möchte das nicht mehr.
Daher die Frage nach einem Makro, dass anders als mein Bisheriges, die Formatierungen nicht mit kopiert.

Und ja: Am Ende wird die Markierung automatisch in einem Makro erfolgen und dann
mit dem jetzt gerade gefragten neuen Makro als unformatierter Text in andere Zellen reinkopiert.

Aber ich sehe da keinen Zusammenhang zum Dateinamen, Xls oder XLSX oder ODS oder woran ich erkenne,
welche Zellen ich markieren muss oder ob ich das manuell oder dann später in einem Makro nutze.

Ich markiere irgendwelche beliebigen Zellen (eine oder mehrere, In einer Spalte oder nebeneinander oder beides) und möchte sie in irgendeinem beliebigen anderen oder demselben Sheet wieder unformatiert an der von mir selbst ausgewählten dann neuen aktuellen Cursor-Position ausspucken.

Ich weiss nicht mehr, wie ich das noch ausdrücken soll?!?

Vielleicht so:
"Copy-paste ohne Formate". (Gibt es hundert Beiträge, aber keine Lösung.)

Oder so:
Als Makro und ohne, dass ein Fenster aufgeht soll das geschehen:
Etwas bereits Markiertes und Kopiertes, woanders wo der Cursor inzwischen neu platziert wurde, rechte Maustaste und NUR REINE "INHALTE EINFÜGEN"
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,
das habe ich schon so verstanden. Ich würde nur vorher einsetzen und schon das Markieren und Kopieren per Makro machen.
Das Einfügen aus Excel ist etwas anderes als aus Calc. Daher macht es schon einen Unterschied woher das Kopierte kommt und macht es schwierig, weil dann jeder Fall extra behandelt werden muss.
Ich würde also per Makro:
1. Die gewünschte Datei aus der die Daten entnommen werden sollen per Makro in Calc öffnen.
2. Die Inhalte (ohne Formatierungen) der gewünschten Zellen aufnehmen.
3. Die Inhalte in die Zieldatei schreiben.
Meine Fragen beziehen sich daher auf die ersten beiden Schritte.
Ok - wenn das nicht sein soll (was vollkommen ok ist!), dann muss ich anders denken. Allerdings ist wichtig: stammen die kopierten Zellen aus Calc oder aus Excel? (oder ist das beleibig)
Gruß,
mikeleb
FraWie
**
Beiträge: 46
Registriert: So, 12.04.2020 18:37

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

Beitrag von FraWie »

Jetzt habe ich verstanden, wohin Du willst.
:-)
1. Die gewünschte Datei aus der die Daten entnommen werden sollen per Makro in Calc öffnen.
2. Die Inhalte (ohne Formatierungen) der gewünschten Zellen aufnehmen.

1+2. geschieht prinzipiell bereits - Die Datei *.XLSX wird in Calc geöffnet und die Spalte,
in der "Grade" steht, kopiert:

Code: Alles auswählen

' ****(1)**************************************************************
' *** Erste Spalte GRADE suchen, markieren und kopieren
' *********************************************************************

dim args1(20) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.SearchFiltered"
args1(4).Value = false
args1(5).Name = "SearchItem.Backward"
args1(5).Value = false
args1(6).Name = "SearchItem.Pattern"
args1(6).Value = false
args1(7).Name = "SearchItem.Content"
args1(7).Value = false
args1(8).Name = "SearchItem.AsianOptions"
args1(8).Value = false
args1(9).Name = "SearchItem.AlgorithmType"
args1(9).Value = 0
args1(10).Name = "SearchItem.SearchFlags"
args1(10).Value = 0
args1(11).Name = "SearchItem.SearchString"
args1(11).Value = "GRADE"
args1(12).Name = "SearchItem.ReplaceString"
args1(12).Value = ""
args1(13).Name = "SearchItem.Locale"
args1(13).Value = 255
args1(14).Name = "SearchItem.ChangedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.DeletedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.InsertedChars"
args1(16).Value = 2
args1(17).Name = "SearchItem.TransliterateFlags"
args1(17).Value = 256
args1(18).Name = "SearchItem.Command"
args1(18).Value = 0
args1(19).Name = "SearchItem.SearchFormatted"
args1(19).Value = false
args1(20).Name = "SearchItem.AlgorithmType2"
args1(20).Value = 1

dispatcher.executeDispatch(Liste_Frame, ".uno:ExecuteSearch", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "By"
args2(0).Value = 1
args2(1).Name = "Sel"
args2(1).Value = false
dispatcher.executeDispatch(Liste_Frame, ".uno:GoDown", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "By"
args3(0).Value = 1
dispatcher.executeDispatch(Liste_Frame, ".uno:GoDownToEndOfDataSel", "", 0, args3())

dispatcher.executeDispatch(Liste_Frame, ".uno:Copy", "", 0, Array())

ABER:
Es werden eben auch die Formatierungen mit kopiert.
Hier würden wir jetzt in einen völlig neuen Weg abbiegen.
Denke, es ist einfacher, das anschließende Einfügen ohne Foramtierungen zu realisieren.
Oder gibt es eine einfachere Lösung?


3. Die Inhalte in die Zieldatei schreiben.
Ja, das fehlt jetzt "Nur" noch...

Mache ich ja bislang mit meinem kleinen "paste"-Makro, welches auch die Formate mit einfügt.
(Jetzt sind wir wieder da, wo ich hinwollte :-) )

Code: Alles auswählen

document_Werte_einfuegen   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim argsPasteT(5) as new com.sun.star.beans.PropertyValue
	argsPasteT(0).Name = "Flags"
	argsPasteT(0).Value = "SVF" 'Alt: "SVD" 
	argsPasteT(1).Name = "FormulaCommand"
	argsPasteT(1).Value = 0
	argsPasteT(2).Name = "SkipEmptyCells"
	argsPasteT(2).Value = false
	argsPasteT(3).Name = "Transpose"
	argsPasteT(3).Value = false
	argsPasteT(4).Name = "AsLink"
	argsPasteT(4).Value = false
	argsPasteT(5).Name = "MoveMode"
	argsPasteT(5).Value = 4
	dispatcher.executeDispatch(document_Werte_einfuegen, ".uno:InsertContents", "", 0, argsPasteT())
Allerdings ist wichtig: stammen die kopierten Zellen aus Calc oder aus Excel?
Im konkreten Fall stammen die originär aus der in Calc geöffneten Excel-Datei.
Generell wäre aber so ein ganz kurzes "paste"-Makro, ohne dass Formatierungen
gleich mit eingefügt werden, extrem hilfreich und einfach nur GENIAL !!!


:-)
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,
ich dachte das Markieren und Kopieren machst du händisch.
Wenn es sowieso per Makro passiert, dann kopiere doch einfach nur die Werte (nicht über Copy!).
Sind folgende Vermutungen richtig:
- die Excel-Datei hat nur eine Tabelle?
- das Wort "GRADE" steht in einer Zelle und alle darunter befindlichen Zellen sollen kopiert werden
Gruß,
mikeleb
FraWie
**
Beiträge: 46
Registriert: So, 12.04.2020 18:37

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

Beitrag von FraWie »

Hallo mikeleb!
ich dachte das Markieren und Kopieren machst du händisch.
Ich hatte es heruntergebrochen auf das Kernproblem:

Es ist "etwas" markiert und bereits in die Zwischenablage kopiert.
Dieses "etwas" soll jetzt irgendwo, wo der Cursor steht, eingefügt werden - aber nur der Inhalt, nicht die Formate.
Wenn es sowieso per Makro passiert, dann kopiere doch einfach nur die Werte (nicht über Copy!).
Scherzkeks. Bist Du ein Bot?
Danach frage ich Dich doch hier die ganze Zeit. Ich kann es nicht ohne Formate.
Und wie soll es ohne "copy" gehen???
Das sagst Du dem Richtigen ! lol

- die Excel-Datei hat nur eine Tabelle?
Ja, aber das ist doch völlig unerheblich. Ich habe es doch abstrahiert auf "ETWAS IST MARKIERT + KOPIERT UND SOLL WOANDERS gePASTET" werden.
- das Wort "GRADE" steht in einer Zelle und alle darunter befindlichen Zellen sollen kopiert werden
Auch das ist doch völlig egal. Es geht um das Ausspucken der Zwischenablage an beliebieger anderer Cursorposition.
Ich verstehe nicht, wo ich mich da falsch ausdrücke?!?


Ich habe das Pferd jetzt nochmal von Hinten aufgezäumt:

An einer anderen Stelle ist mir aufgefallen, dass genau diese unsinnigen Formatierung einfach verschwinden,
wenn man folgendes drüber laufen lässt.

Ich markiere erst alle Daten und mache dann diesen Dispatcher mit .uno:ExecuteSearch
und dem array args44(20) mit EINUNDZWANZIG Argumenten, von denen ich über die
Hälfte nicht einmal ansatzweise verstehe.

WO KANN MAN das bitte mal nachlesen, welche Argumente wozu beim .uno:ExecuteSearch
benötigt werden?

So, nach dem folgenden Code sind alle Felder reine Datenfelder ohne Formatierungen:

Code: Alles auswählen


args40(0).Name = "Sel"
args40(0).Value = false

dispatcher.executeDispatch(Liste_Frame, ".uno:GoToStart", "", 0, args40())

rem ----------------------------------------------------------------------
'dim args3(0) as new com.sun.star.beans.PropertyValue
args40(0).Name = "Sel"
args40(0).Value = true

dispatcher.executeDispatch(Liste_Frame, ".uno:GoToEndOfData", "", 0, args40())


dim args44(20) as new com.sun.star.beans.PropertyValue
args44(0).Name = "SearchItem.StyleFamily"
args44(0).Value = 2
args44(1).Name = "SearchItem.CellType"
args44(1).Value = 0
args44(2).Name = "SearchItem.RowDirection"
args44(2).Value = true
args44(3).Name = "SearchItem.AllTables"
args44(3).Value = false
args44(4).Name = "SearchItem.SearchFiltered"
args44(4).Value = false
args44(5).Name = "SearchItem.Backward"
args44(5).Value = false
args44(6).Name = "SearchItem.Pattern"
args44(6).Value = false
args44(7).Name = "SearchItem.Content"
args44(7).Value = false
args44(8).Name = "SearchItem.AsianOptions"
args44(8).Value = false
args44(9).Name = "SearchItem.AlgorithmType"
args44(9).Value = 1
args44(10).Name = "SearchItem.SearchFlags"
args44(10).Value = 6144
args44(11).Name = "SearchItem.SearchString"
args44(11).Value = "^.*$"
args44(12).Name = "SearchItem.ReplaceString"
args44(12).Value = "&"
args44(13).Name = "SearchItem.Locale"
args44(13).Value = 255
args44(14).Name = "SearchItem.ChangedChars"
args44(14).Value = 2
args44(15).Name = "SearchItem.DeletedChars"
args44(15).Value = 2
args44(16).Name = "SearchItem.InsertedChars"
args44(16).Value = 2
args44(17).Name = "SearchItem.TransliterateFlags"
args44(17).Value = 1073743104
args44(18).Name = "SearchItem.Command"
args44(18).Value = 3
args44(19).Name = "SearchItem.SearchFormatted"
args44(19).Value = false
args44(20).Name = "SearchItem.AlgorithmType2"
args44(20).Value = 2

dispatcher.executeDispatch(Liste_Frame, ".uno:ExecuteSearch", "", 0, args44())

Dann ist mir aufgefallen, dass da im Prinzip was ähnliches passiert, wie in Deinem genialen Schnipsel
und ich das einfach erst über die Ursprungsdatei (bei der sind mir alle Formatierungen egal) laufen lassen kann
und alle Formatierungen sind futsch!
(Das "^.*$" hatte ich gleich wiedererkannt - was auch immer das sein mag... WItzigerweise replaced Du mit "$1",
obiger code aber mit "&" - wozu ist das?)

Habe es dann noch angepasst, so dass das gesamte Sheet bereingt wird und damit ist das Problem gelöst:

Code: Alles auswählen

	ocell=thiscomponent.sheets(0)
	ocell.clearcontents(1016)
	osr=ocell.createReplaceDescriptor
	osr.SearchRegularExpression=true
	osr.searchstring="^(.*)$"
	osr.replacestring="$1" 
	ocell.replaceAll(osr)


Nicht gelöst ist das "copy-paste" Problem ohne Formate.

Wenn Du da noch ein code-Schnipselchen hättest?

Und Danke für Deine Mühe + Geduld ;-)

:-)
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,
Scherzkeks. Bist Du ein Bot?
Weder scherze ich, noch liefere ich automatische Antworten und vielleicht sollte ich jetzt aufhören :(
Das was du meinst (und ich habe es sehr wohl verstanden) ist das Einfügen ohne Formatierungen.
Ich rede vom Kopieren. Der Dispatcher (auf den ich komplett verzichten würde) kopiert mit

Code: Alles auswählen

dispatcher.executeDispatch(Liste_Frame, ".uno:Copy", "", 0, Array())
eben alles in die Zwischenablage. Nun möchtest du aus dieses Zwischenablage nur die Werte und Texte extrahieren und in deine Tabelle einfügen.
Ich würde gar nicht erst alles in die Zwischenablage kopieren, sondern eben nur die Werte und Texte (und zwar nicht in die Zwischenablage!)
Wenn du diesen Weg nicht gehen möchtest - ok. Es gibt auch eine Lösung die Inhalte der Zwischenablage entsprechend zu bearbeiten (die ist aber auch nicht trivial). Aber es wäre meiner Meinung nach erheblich einfacher das Problem am Anfang zu lösen bzw. gar nicht erst aufkommen zu lassen.
Und wie soll es ohne "copy" gehen???
Das hast bereits gesehen:

Code: Alles auswählen

oBereich = oTab.getCellRangeByName("A1:A15")
aData = oBereich.getDataArray()
Diese zwei Zeilen übernehmen die Daten (Texte bzw. Zahlen - und nur diese!) aus dem Bereich A1:A15. Was ich versuche, dir zu erklären ist, dass man den Bereich dynamisch festlegen kann, wenn du verrätst, wo die Daten, die du haben willst, liegen.
Das folgende Makro liefert den Inhalt der Zwischenablage als Text

Code: Alles auswählen

Sub Main
	on error Resume Next
	oclip=createUnoservice("com.sun.star.datatransfer.clipboard.SystemClipboard")
	oData=createUnoservice("com.sun.star.datatransfer.XTransferable")
	oData=oclip.getcontents
	Datas=oData.gettransferdataflavors()
	typ=-1
	for i=0 to ubound(Datas)
		if Datas(i).MimeType="text/plain;charset=utf-16" then
			typ=i
		end if
	next
	if typ>-1 then
		sclip=odata.gettransferdata(Datas(typ))
	end if
	msgbox sclip
End Sub
Dieser Text muss nun nur noch in einzelne Zellen zerlegt, Zahlen entsprechend formatiert werden und fertig. Das ist meiner Meinung nach der kompliziertere Weg - aber ok. Ich habe gerade viel über den Umgang mit der Zwischenablage gelernt.
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,

Code: Alles auswählen

argsPasteT(0).Value = "SVF" 'Alt: "SVD"
S ... Strings (Text)
V ... Values (Werte)
D ... Dates (Datum und Zeit)
F ... Formats (Formatierungen)

Code: Alles auswählen

argsPasteT(0).Value = "SVD"
entspricht dem "Einfügen als ... Text+Zahlel+Datum und Zeit". Da es wohl nicht das Gewünschte leistet, weil auskommentiert, müssen weitere Bearbeitungen her.
Gruß,
mikeleb
FraWie
**
Beiträge: 46
Registriert: So, 12.04.2020 18:37

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

Beitrag von FraWie »

Danke DIr - ich schaue mir das heute Nachmittag an.
S ... Strings (Text)
V ... Values (Werte)
D ... Dates (Datum und Zeit)
F ... Formats (Formatierungen)
Wo steht so etwas?
Kannst Du da einen Hinweis geben?
FraWie
**
Beiträge: 46
Registriert: So, 12.04.2020 18:37

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

Beitrag von FraWie »

Hallo mikeleb!

Schön, dass Du noch da bist.
Und sorry, dass es mit so schälen Anfängern wie mir so schwer ist...


Habe mich jetzt nochmal 2 Tage damit beschäftigt.

Zu meiner Beruhigung muss ich sagen, dass ich hier 30 Links aus OO-Foren, LO-Foren reinkopieren
könnte, wo exakt mein Problem erfragt wird und es nicht eine Lösung dazu gibt .
(Vielleicht gibt es ja auch einfach keine Lösung?!?)

Ich versuche mal das Pferd von hinten aufzuzäumen.


Folgender Code macht im Ergebnis EXAKT das, was ich haben möchte:

Code: Alles auswählen

Tabelle = ThisComponent.Sheets().getByName("Tabelle1")
Daten_Zu_Kopieren = Tabelle.getCellRangeByName("A1:A10").getDataArray()
Tabelle.getCellRangeByName("C1:C10").setDataArray(Daten_Zu_Kopieren) 	



ABER:

Er ist festgelegt auf

- den Bereich, wo die Daten herkommen ("A1:A10")
- den Bereich, wo die Daten hinsollen ("C1:C10")

Ich möchte diese Festlegung nicht !!!

Wir drehen uns um diesen Kreis, denn:
Du sagst : "...wenn du verrätst, wo die Daten, die du haben willst, liegen"
Und ich versuche zu erklären: Es gibt diesen festen Bereich nicht. Er soll variabel sein.


Was ich möchte:

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.

Das ist nichts weiter, als was umständlich mit

"Bereich markieren"
Strg + "c"
und dann an beliebiger Stelle rechte Maustaste und "Inhalte einfügen"

geht.


Mit meinem kleinen Dreizeiler oben ginge es, wenn die Bereiche ("A1:A10") + ("C1:C10")
variabel aus den unter 1. und 2. genannten Bedingungen ausgelesen werden könnten.

Dann würde es 100% so funktionieren wie ich es mir wünschte...

Wie gesagt, vielleicht lässt sich das "Inhalte Einfügen" auch nicht als Makro realisieren.

:shock:
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,
natürlich bin ich noch da und ich verstehe auch deine Problematik.
Wie gesagt, vielleicht lässt sich das "Inhalte Einfügen" auch nicht als Makro realisieren.
Im Prinzip schon, denn genau das macht ja

Code: Alles auswählen

dispatcher.executeDispatch(document_Werte_einfuegen, ".uno:InsertContents", "", 0, argsPasteT())
wobei die entsprechenden Parameter (du sonst über den Dialog gewählt werden), nun in dem Array argsPasteT() stecken.
Wenn die Originaldaten aber seltsam formatiert sind, dann kann das Ergebnis doch nicht das Gewünschte sein. Wenn z. B. Zahlen als Text formatiert waren, dann wird mit -> Inhalte Einfügen ... -> Zahlen eben nichts eingefügt. Daher ist diese Methode nicht immer zielführend. Offensichtlich ist das bei dir so der Falle (o. g. Dispatchermethode scheint ja nicht das zu liefern, was du möchtest). Also müssen die Daten noch irgendwie aufbereitet werden.
Aus diesem Grund versuche ich, das Problem zu lösen, indem ich mir das Gesamtproblem ansehe.
Was ich nach wie vor nicht verstehe, weil du dazu verschiedene Aussagen gemacht hast: Wählst du die Daten per Hand oder machst du es per Makro, wie in deinem Post vom 12.02.2021 16:30?
Folgender Code macht im Ergebnis EXAKT das, was ich haben möchte:
Tabelle = ThisComponent.Sheets().getByName("Tabelle1")
Daten_Zu_Kopieren = Tabelle.getCellRangeByName("A1:A10").getDataArray()
Tabelle.getCellRangeByName("C1:C10").setDataArray(Daten_Zu_Kopieren)
Natürlich lassen sich die Bereiche (hier A1:A10 und C1:C10) variabel gestalten (das ist auch mein Ziel!). Dazu gibt es verschiedene Varianten:
1) Du markierst den Datenbereich. Per Makro werden die Inhalte ausgelesen. Du markierst die Zielzelle. Per Makro werden die Daten formatlos eingefügt.
2) (so würde ich denken) Ich starte ein Makro, das in der Tabelle der xlsx-Datei die Zelle mit dem Text "GRADE" sucht. Alle Inhalte in der Spalte unterhalb von "GRADE" werden ausgelesen. Das Makro geht nun die Zieltabelle, fügt die Inhalte in die gewünschte Spalte unter die bereits vorhandenen Daten ein.
Was ich allerdings total verwirrt:
Was ich möchte:

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.
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 (da ist Strg+c schneller). Punkt 4 müsste auch gestartet werden (das würde per Shift+Strg+v und danach ein Enter aber auch so erledigt sein).
Nur zu meinem Verständnis noch einmal:
Es geht darum Daten ohne Formatierung aus einer bestimmten Datei, einer bestimmten Tabelle, allerdings eines variablen Bereichs in eine bestimmte Tabelle in eine bestimmte Spalte einzufügen?
Gruß,
mikeleb
Antworten