Hallo Dieter, Robert. *,
als ich das Makro mal auf ein eigenes Dokument anwenden wollte, bekam
ich Fehlermeldungen. Der Grund war, dass das Verfolgen von Änderungen
angeschaltet war und damit auch bereits gelöschteTextfelder wegen des
Vergleichs noch vorhanden waren, aber nicht selektiert werden konnten
(das Dokument war ein Kapitel eines LibreOffice-Handbuchs). Ich habe das
Makro entsprechend angepast und außerdem einen Dialog zur Anzeige des
"Fortschritts" (einfach die fortlaufende Nummer des untersuchten
Textfelds) hinzugefügt, weil das Programm doch eine Weile läuft und man
sonst nicht weiß, dass es noch aktiv ist.
Das scheint ein nützliches Werkzeug zu sein, aber ich weiß nicht so
recht, wie man das elegant der Allgemeinheit zur Verfügung stellt.
Hier der Code (Deklarationen fehlen meist noch):
Sub fehlendeReferenz
dim prop(), zaehl as long
oDoc = ThisComponent
oText = oDoc.Text
' create dialog
oDialog = CreateUnoService("com.sun.star.awt.UnoControlDialog")
oDialogModel = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
oDialogModel.setPropertyValues( _
Array("Height", "PositionX", "PositionY", "Width","Title"), _
Array(30, 50, 50, 100, "Nummer des Textfelds") )
oDialog.setModel(oDialogModel)
oFTextModel =
oDialogModel.createInstance("com.sun.star.awt.UnoControlFixedTextModel")
oFTextModel.setPropertyValues(Array("Height", "Label", "PositionX",
"PositionY", "Width"), _
Array(13, "A", 35, 10, 10))
oDialogModel.insertByName("CountTextFields", oFTextModel)
oDialog = CreateUnoService("com.sun.star.awt.UnoControlDialog")
oDialog.setModel(oDialogModel)
oDialog.setVisible(TRUE)
oTextFields = oDoc.Textfields.createEnumeration
do while oTextFields.hasMoreElements
oTextField = oTextFields.nextElement
zaehl = zaehl + 1
wait 1 'otherwise many numbers will not be displayed, resulting
in a seemingly frozen state
oDialog.getControl("CountTextFields").Text = zaehl
if oTextField.isFieldDisplayed = TRUE then
prop = oTextField.PropertySetInfo.getProperties
for i = 0 to UBound(prop) - 1
if prop(i).Name = "CurrentPresentation" then
if oTextField.CurrentPresentation = "Fehler:
Referenz nicht gefunden" then
msgbox "fehlende Referenz gefunden, wird angezeigt"
oCtrler.select(oTextField.Anchor)
exit sub
end if
end if
next
end if
loop
msgbox "keine fehlende Referenz gefunden"
oDialog.setVisible(FALSE)
End Sub
Wie gesagt: So funktioniert es nur, wenn man es z.B. über eine
Tastenkombination im Dokument selbst aufruft.
Gerhard
Am 06.07.2017 um 22:50 schrieb Gerhard Weydt:
Hallo Dieter, Robert, *,
ich kann euch ein Makro anbieten, das in dieser einfachen Form die
"erste" Referenz findet, zu der das referenzierte Objekt nicht mehr
vorhanden ist. "Erste" dürfte nicht der von der Reihenfolge erste,
sondern der am frühesten angelegte Verweis sein.
Sub Main
oDoc = ThisComponent
oCtrler = oDoc.CurrentController
oTextFields = oDoc.Textfields.createEnumeration
do while oTextFields.hasMoreElements
oTextField = oTextFields.nextElement
if oTextField.CurrentPresentation = "Fehler: Referenz nicht
gefunden" then
oCtrler.select(oTextField.Anchor)
end if
loop
End Sub
Das Makro darf man nicht von der Makro-IDE aus starten, dann klappt
zwar der Select, aber die Seite mit dem ausgewählten Verweis wird
nicht angezeigt. Aber es geht, wenn man das Makro über eine
Tastenkombination startet, ich habe z.B. Alt+R verwendet.
Das ist nur ein einfaches Modell, man kann damit arbeiten, wenn man
jeweils eine fehlerhafte Referenz sucht, sie korrigiert oder beseitigt
und dann nach der nächsten sucht. Vielleicht fällt jemand eine
Verbesserung ein.
Gruß
Gerhard
Am 06.07.2017 um 20:42 schrieb Robert Großkopf:
Hallo Dieter,
der Umweg über PDF ist mir noch gar nicht in den Sinn gekommen. Ist
zwar
umständlich, aber immerhin stellt das sicher, dass keine fehlenden
Querverweise übersehen werden. Vielleicht weiß aber doch noch jemand
eine elegantere Variante.
Dazu habe ich auch schon vor einiger Zeit eine Bugmeldung aufgegeben.
Weißt du noch die Bug-Nummer? Ich hatte auch schonmal in Bugzilla
nachgeschaut, aber auf die Schnelle nichts entdeckt.
Ist dieser hier:
https://bugs.documentfoundation.org/show_bug.cgi?id=58920
Gruß
Robert
--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.