"Spalten Formatieren mit Text in Spalten" - als Makro realisieren
Moderator: Moderatoren
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
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 !!!
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 !!!
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
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?
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?
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
Hallo,
Das Makro ließe sich auch nur auf eine Zellbereich (die neuen Daten) anwenden.
Mit würde nur harte Formatierungen entfernt.
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.
Deswegen ja die Formatvorlage, die du nach einen Wünschen anpassen kannst.ändert ja auch alle vorhandenen Formatierungen. Das ist leider kontraproduktiv.
Das Makro ließe sich auch nur auf eine Zellbereich (die neuen Daten) anwenden.
Mit
Code: Alles auswählen
ocell.clearcontents(32)
Warum nicht gleich per Makro? Wenn schon automatisieren ...Wenn ich händisch die Werte einfüge
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
mikeleb
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
Ja, ich bitte darum!!!Warum nicht gleich per Makro? Wenn schon automatisieren ...
Ich versuche nochmal mein Problem an der Sache zu beschreiben:Nur müsste klar sein, woher die Daten genommen werden sollen.
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...
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
Hallo,
Ist das automatisierbar? Sprich: Woran erkennst du, welche Zellen es sein müssen?
Die Spalte ist bestimmt festgelegt. Ist der Dateiname auch festgelegt? xls oder xlsx?Die Daten stammen aus einer Spalte in einer XLS Datei.
Code: Alles auswählen
Ich markiere daher die gewünschten Zellen
Gruß,
mikeleb
mikeleb
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
Die Spalte ist bestimmt festgelegt. Ist der Dateiname auch festgelegt? xls oder xlsx?
Hmm... Verstehe die Fragen nicht...Ich markiere daher die gewünschten Zellen
Ist das automatisierbar? Sprich: Woran erkennst du, welche Zellen es sein müssen?
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"
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
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)
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
mikeleb
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
Jetzt habe ich verstanden, wohin Du willst.
1+2. geschieht prinzipiell bereits - Die Datei *.XLSX wird in Calc geöffnet und die Spalte,
in der "Grade" steht, kopiert:
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?
Mache ich ja bislang mit meinem kleinen "paste"-Makro, welches auch die Formate mit einfügt.
(Jetzt sind wir wieder da, wo ich hinwollte )
Generell wäre aber so ein ganz kurzes "paste"-Makro, ohne dass Formatierungen
gleich mit eingefügt werden, extrem hilfreich und einfach nur GENIAL !!!
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?
Ja, das fehlt jetzt "Nur" noch...3. Die Inhalte in die Zieldatei schreiben.
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())
Im konkreten Fall stammen die originär aus der in Calc geöffneten Excel-Datei.Allerdings ist wichtig: stammen die kopierten Zellen aus Calc oder aus Excel?
Generell wäre aber so ein ganz kurzes "paste"-Makro, ohne dass Formatierungen
gleich mit eingefügt werden, extrem hilfreich und einfach nur GENIAL !!!
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
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
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
mikeleb
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
Hallo mikeleb!
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.
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
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:
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:
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
Ich hatte es heruntergebrochen auf das Kernproblem:ich dachte das Markieren und Kopieren machst du händisch.
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.
Scherzkeks. Bist Du ein Bot?Wenn es sowieso per Makro passiert, dann kopiere doch einfach nur die Werte (nicht über Copy!).
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
Ja, aber das ist doch völlig unerheblich. Ich habe es doch abstrahiert auf "ETWAS IST MARKIERT + KOPIERT UND SOLL WOANDERS gePASTET" werden.- die Excel-Datei hat nur eine Tabelle?
Auch das ist doch völlig egal. Es geht um das Ausspucken der Zwischenablage an beliebieger anderer Cursorposition.- das Wort "GRADE" steht in einer Zelle und alle darunter befindlichen Zellen sollen kopiert werden
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
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
Hallo,
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 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.
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
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.
Weder scherze ich, noch liefere ich automatische Antworten und vielleicht sollte ich jetzt aufhörenScherzkeks. Bist Du ein Bot?
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())
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.
Das hast bereits gesehen:Und wie soll es ohne "copy" gehen???
Code: Alles auswählen
oBereich = oTab.getCellRangeByName("A1:A15")
aData = oBereich.getDataArray()
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
Gruß,
mikeleb
mikeleb
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
Hallo,
S ... Strings (Text)
V ... Values (Werte)
D ... Dates (Datum und Zeit)
F ... Formats (Formatierungen) 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.
Code: Alles auswählen
argsPasteT(0).Value = "SVF" 'Alt: "SVD"
V ... Values (Werte)
D ... Dates (Datum und Zeit)
F ... Formats (Formatierungen)
Code: Alles auswählen
argsPasteT(0).Value = "SVD"
Gruß,
mikeleb
mikeleb
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
Danke DIr - ich schaue mir das heute Nachmittag an.
Kannst Du da einen Hinweis geben?
Wo steht so etwas?S ... Strings (Text)
V ... Values (Werte)
D ... Dates (Datum und Zeit)
F ... Formats (Formatierungen)
Kannst Du da einen Hinweis geben?
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
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:
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.
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.
Re: "Spalten Formatieren mit Text in Spalten" - als Makro realisieren
Hallo,
natürlich bin ich noch da und ich verstehe auch deine Problematik. 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?
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:
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?
natürlich bin ich noch da und ich verstehe auch deine Problematik.
Im Prinzip schon, denn genau das macht jaWie gesagt, vielleicht lässt sich das "Inhalte Einfügen" auch nicht als Makro realisieren.
Code: Alles auswählen
dispatcher.executeDispatch(document_Werte_einfuegen, ".uno:InsertContents", "", 0, argsPasteT())
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?
Natürlich lassen sich die Bereiche (hier A1:A10 und C1:C10) variabel gestalten (das ist auch mein Ziel!). Dazu gibt es verschiedene Varianten: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)
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 möchtest du davon per Makro erledigen?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.
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
mikeleb