Feldaktualisierung ausschalten

Das Textverarbeitungsprogramm

Moderator: Moderatoren

Ottmar
Beiträge: 2
Registriert: Mi, 09.06.2021 11:37

Feldaktualisierung ausschalten

Beitrag von Ottmar »

Hallo liebes Forum

Ich bin neu in diesem Thema, habe mit OpenOffice-Programmierung relativ wenig zu tun, sitze nun vor einem Problem, dass ich trotz massiver Recherche auch in diesem Forum nicht gelöst kriege.

Ausgangslage. Ein OpenOffice-Writer Dokument enthält eine Tabelle mit verschiedenen Platzhaltern der Art $$$Text. In der Vorlage mit den Platzhaltern sind alle Zellen 'Text'
Diese Platzhalter sollen durch Werte aus einer anderen Anwendung ersetzt werden. Das habe ich alles soweit hingekriegt, ABER:
Die Werte aus der anderen Anwerndung sind manchmal Texte, manchmal aber auch Zahlen (Währungsformat, Prozentzahlen usw.) Nachdem durch das von mir geschriebene Makro $$$Text durch einen Text ersetzt wird, der nur Ziffern darstellt, formatiert OpenOffice das um setzt Nachkommastellen, interpretiert Zahlen als Datum usw. Es gibt doch bestimmt irgendwo eine Klasse, Methode oder sonst was, was dieses ganze Uminterpretieren einfach abstellt, so dass die Texte einfach Texte bleiben.

In diesem Forum hier bin ich auf lockController gestoßen, der schiem mir erst brauchbar, mit dem schieße ich aber am Ziel vorbei, der 'vertagt' - so wie ich das sehe - ja auch nur die Dokumentaktualisierung auf später.

Mein Macro läuft im übriegens nicht im Office, sondern in einer externen Anwendung "HCL Notes / Domino", insfern wirkt die Syntax von folgendem Code für OpenOffice-Programmierprofis wahrscheinlich etwas aufgebläht und gewöhnungsbedürftig, sie läuft aber ansonsten prima.

Code: Alles auswählen

	Redim UNOArgs1(3)
	Set UNOArgument1 = OLEClient.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
	Set UNOArgument2 = OLEClient.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
	Set UNOArgument3 = OLEClient.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
	Set UNOArgument4 = OLEClient.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
	UNOArgument1.Name = "SearchItem.SearchString"
	UNOArgument1.Value = Cstr(strSource)
	UNOArgument2.Name = "SearchItem.ReplaceString"
	UNOArgument2.Value = Cstr(strDest)
	UNOArgument3.Name = "SearchItem.Command"
	UNOArgument3.Value = 3
	UNOArgument4.Name = "Quiet"
	UNOArgument4.Value = True
	Set UNOArgs1(0) = UNOArgument1
	Set UNOArgs1(1) = UNOArgument2
	Set UNOArgs1(2) = UNOArgument3
	Set UNOArgs1(3) = UNOArgument4
	Call UNODispatcher.executeDispatch(UNODocument, ".uno:ExecuteSearch", "", 0, UNOArgs1)
Wer hilft mir auf die Sprünge?
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Feldaktualisierung ausschalten

Beitrag von mikeleb »

Hallo,
die Ursache wird die Funktion CSTR() sein, die die Quellwerte entsprechend konvertiert.
Gruß,
mikeleb
Ottmar
Beiträge: 2
Registriert: Mi, 09.06.2021 11:37

Re: Feldaktualisierung ausschalten

Beitrag von Ottmar »

Der Cstr() ist es nicht, ich habe es soeben ausprobiert. Das hätte mich auch gewundert, weil ich ja explizit will, dass Strings in Open-Office ankommen.

Als Übeltäter habe ich die OpenOffice-Macros identifiziert. Ich habe mal testweise einen Client brutal kaputt gemacht und die Macros entfernt und siehe da, es läuft. Da das aber keine richtige Lösung ist und nachdem ich auch nach langer Recherche nichts gefunden habe, wie ich über UML der Lage Herr werden kann, muss ich auf eine Bastellösung zurückgreifen. Ich bin gerade dabei, meine Programmierng dahingehend zu ändern, dass vor jeder eigentlichen Texteingabe der sogenannte 'weiße Adler' kommt, ein Trick aus dem HTML-Anfangszeiten von anno dazumal. Man schreibt vor den eigentlichen Eingaben ein weißes Zeichen auf weißem Grund. Damit kann OpenOffice die Strings nicht in etwas anderes umkonvertieren, da für eine mögliche Konvertierung das 'Blindzeichen' mit ausgewertet wird und demnach nichts in eine Zahl, ein Datum oder sonst was konvertiert werden kann.

Die Lösung gefällt mir zwar nicht, das Coding wird nicht gut wiederverwertbar sein, aber immerhin ist es für die aktuelle Problemstellung eine funktionierende und zulässige Lösung.

Falls noch jemandem etwas Sinnvolleres einfällt, möge er es für die Nach uns Guckenden hier einstellen, ich betrachte den Vorgang als abgeschlossen.
Antworten