"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

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

Beitrag von FraWie »

Hallo Gemeinde!

Folgende Situation:

Spalte "A" enthält bei mir Materialgüten als Text - eine Mischung aus Ziffern und Zeichen.
Diese Spalte wird immer wieder durch einkopieren neuer Daten erweitert.
Nach dieser Spalte soll per Makro - als Vorschritt zur Rechungserstellung - sortiert werden.

Es kommt nun vor, dass die Grundformatierung der Zellen dieser Spalte "A" sich ändert.

Z.B.

"A1" = "316L"
"A2" = "316L"

Mit "B2": '=A1=A2' erhält man ein "FALSCH"
Was bedeutet, dass beide Zellen nicht dasselbe enthalte, obwohl sie identisch erscheinen.

Abhilfe schafft:

Spalte "A" markieren
Daten -> Text in Spalten...
Unten im Spaltenkopf Spalte "A" markieren
Spaltentyp "Text" auswählen
OK

Dann sind alle Zellen dieser Spalte auf besondere Art und Weise definitiv als Text formatiert
und die Zellfunktion '=A1=A2' liefert plötzlich "WAHR".

Eine Formatierung der Zellen mit "rechte Maustaste / Zellen formatieren / Kategorie = Text / Fomat = @ / OK"
führt NICHT zum selben Ergebnis. Die Formel '=A1=A2' bleibt "FALSCH"

Ich habe irgendwo gelesen, dass die MenüFunktion "Daten -> Text in Spalten..." intern einen tiefgreifenden Prozess ablaufen lässt, der sehr komplex ist und nicht mit dem "Formatierungsbefehl" vergleichbar ist.

FRAGE 1:
WIe kann ich diese Menü-Funktion "Daten -> Text in Spalten..." als Makro relisieren ?

FRAGE 2:
Vielleicht hilft das:
Makro-Aufzeichnung funktioniert ja bekannterweise nicht bzw hängt am Punkt

rem dispatcher.executeDispatch(document, ".uno:TextToColumns", "", 0, Array())

Gibt es zum ".uno:TextToColumns" irgendwo eine Dokumentation???
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 kommt nun vor, dass die Grundformatierung der Zellen dieser Spalte "A" sich ändert.

Z.B.

"A1" = "316L"
"A2" = "316L"

Mit "B2": '=A1=A2' erhält man ein "FALSCH"
Was bedeutet, dass beide Zellen nicht dasselbe enthalte, obwohl sie identisch erscheinen.
Bitte stelle eine Beispieldatei zur Verfügung, die dieses Fehlverhalten demonstriert.
Ich verstehe zwar worum es geht, aber ich finde selbst kein Beispiel um dieses Fehlverhalten nachzustellen.


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 »

Ja, verstehe ich.
Ich kann auch in keiner Weise nachvollziehen, wie diese Fehl-Formatierung entsteht.
Wenn Du also jetzt die Zelle A1 markierst und in Zelle A2 kopierst wird der Ausdruck "wahr"

Selbst, wenn man jetzt etwas "316L" händisch ind die beiden Zellen schreibt, ändert sich anscheinend
die Formatierung und die Zellen sind "

Hat vielleicht damit zu tun:
In Zeile 7-9 habe ich mit "Inhalte einfügen" ein paar weitere Daten eingefügt.
Dabei passiert es immer wieder, dass wie in Zeile 9 ein Apostroph ( ' ) vorangestellt wird.
Dieses bekomme ich nur weg, indem ich wie folgt vorgehe:

Suchen nach: ^.*$
Ersetzen durch: &
Und wichtig: „Mehr Optionen“ aufklappen und „Regulärer Ausdruck“

Hierfür vielleicht auch eine Erklärung?
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 hilft in B1 die Formel:

=VERKETTEN(A1)=VERKETTEN(A2)

zu nutzen. Das "VERKETTEN()" hat hier keine besondere Bedeutung, außer das es das richtige 'Format' (in '' gesetzt, weil "Format" hier inhaltlich nict das richtige Wort ist) erzwingt.

Das das Problem mittels Formel zu lösen wäre, war auch ein GRund meiner Nachfrage, da ich nicht denke das ein Makro hier eine günstige Lösung ist. Falls Du trotzdem jetzt noch weiterhin ein Makro brauchst, musst Du nochmals danach fragen.


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,
alternativ

Code: Alles auswählen

=IDENTISCH(A1;A2)
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,
mich hat es noch interessiert, warum es überhaupt zu dem "FALSCH" kommt, da doch A1 und A2 scheinbar gleich sind (beide zeigen 4016 an, beide sind als TEXT formatiert). Mittels der Option "Werte hervorheben" erkennt man, dass intern eines ein Wert und eines ein Text ist.
In der internen Struktur (context.xml) sieht das dann so aus:
<table:table-cell table:style-name="ce1" office:value-type="float" office:value="4016" calcext:value-type="float"><text:p>4016</text:p></table:table-cell>

<table:table-cell table:style-name="ce1" office:value-type="string" calcext:value-type="string"><text:p>4016</text:p></table:table-cell>
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 Euch erstmal.

@Stephan:
Ja, ich benötige ein Makro.

Grund:
In umfangreichen Programmen arbeite ich mit den Daten.
Unter anderem wird nach dieser Spalte sortiert.

Wenn diese unterschiedliche Formatierung vorhanden ist, wird aber nicht
ordentlich sortiert, wie ich es möchte. Das geschieht nur, wenn alle Zellen gleiches
Format haben.

Daher möchte ich automatisch, bevor ich eine Rechnung erstelle, erst die
"Spalten Formatieren mit Text in Spalten" und dann sortieren.

Alles automatisch.

Daher auch die Überschrift

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

Ich möchte das eben nicht immer erst von Hand machen müssen (und dann womöglich noch hin
und wieder vergessen und mich ärgern...)

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

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

Beitrag von FraWie »

@mikeleb

Interessant.

Kann ich das irgendwie durch ein Makro ansprechen und die Zellen umändern in Text ?

:?
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 habe es mal folgendermaßen gelöst:
1. In der Spalte A alle Formatierungen etc. löschen (alles außer Text, Werte, Datum) -> als Text formatierte Zahlen haben nun ein vorangestellten Apostroph
2. Entfernung der Apostrophs per Suchen und Ersetzen (mit regulärem Ausdruck)
3. Zuweisung der Zellvorlage "Rechung" (aktuell habe ich darin nur das Zahlenformat "Text" festgelegt - ändere es nach deinen Wünschen; falls es kein Text sein muss, würde ich es komplett weglassen)

Code: Alles auswählen

Sub Main
	ocell=thiscomponent.sheets(0).columns(0)
	ocell.clearcontents(1016)
	osr=ocell.createReplaceDescriptor
	osr.SearchRegularExpression=true
	osr.searchstring="^(.*)$"
	osr.replacestring="$1"
	ocell.replaceAll(osr)
	ocell.cellstyle="Rechnung"
End Sub
Dateianhänge
Spalten Formatieren mit Text in Spalten - Makro.ods
(13.75 KiB) 83-mal heruntergeladen
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 »

Ich glaubs nicht - wie kommt man auf sowas?
Tausend Dank!!!

Habe den Nachmittag noch mit Spurensuche verbracht und herausgefunden, dass die
unsinnige Formatierung möglicherweise durch ein kleines Makro, welches ich nutze, entsteht.

Dieses soll nur den Inhalt aus einer bestehenden kopierten Markierung an der neuen aktuelle Stelle
einfügen. Also ohne Fomatierungen. Macht es auch aber halt manchmal auch ein vorangestelltes ( ' ),
wenn es Text sein soll vermutlich.

Der Code ist dieser:

Sub Werte_einfuegen

rem ----------------------------------------------------------------------
rem define variables
dim document_Werte_einfuegen as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
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 = "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())

End sub 'Werte_einfuegen


Wenn man die Flags in "SDNT" kommt es der Sache näher.
Leider ich auch hier keine Dokumentation. Was hat es mit diesen Flags auf sich?

Habe das hier gefunden, das bekomme ich aber nicht auf die Schnelle hin, es
"variabel zu halten", also die frisch kopierten Zellen an der neuen Cursor-Position einzufügen:


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



Wenn Du da noch einen Tipp hättest?
Vermutlich für Dich ein Dreizeiler...!?

;-)
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,
sinnvoller wird es, das Gesamtproblem anzusehen:
wo kommen denn die Daten her, die dann in die Spalte A (ich tippe mal: unter die letzten Daten) eingefügt werden sollen?
Wie geht es dann weiter? Sortieren hast du angedeutet. Aber warum? und was passiert dann?
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 »

sinnvoller wird es, das Gesamtproblem anzusehen:
Ja und nein...

Ich habe ja jetzt den Übeltäter gefunden.

Zu Deiner Frage: Ich füge die Daten i.d.R. mit dem kleinen Makro ein.

Daher vermutlich das Apostroph ( ' ) und die komische Formatierung.

Daher wäre die Lösung, dieses Makro nicht mehr zu nutzen, sondern dieses andere.(s.o.)
Es müsste nur "variabel" gemacht werden, denn das Ergebnis ist eine tatsächlich
völlig "Format-freie" Kopie der Daten.
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,
deswegen ja meine Frage: Wo kommen denn die Daten her?
Aus einer anderen Datei? Wenn ja: was ist das für eine? Wie ist sie aufgebaut?
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 »

Genau. 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...
Antworten