Dateiname einfügen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Psionwelt
*
Beiträge: 10
Registriert: So, 30.01.2005 18:56

Dateiname einfügen

Beitrag von Psionwelt »

Hallo,

ich möchte gern den Dateinamen, der auf die ersten 11 Zeichen begrenzt sein soll, in meine Dokumente einfügen.
Am liebsten würde ich ja das Makro, das hinter dem Feldbefehl "Dateiname ohne Erweiterung" liegt, entsprechend ändern.

- Geht das? Lassen sich die mitgelieferten Makros überhaupt verändern?
- Und wie sähe die fachgerechte Korrektur aus?


Psionwelt
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Am liebsten würde ich ja das Makro, das hinter dem Feldbefehl "Dateiname ohne Erweiterung" liegt, entsprechend ändern.
Ich wüßte nicht das dieser Feldbefehl mit dem Makro verknüpft ist, hast Du dazu im Internet etwas gefunden?
Geht das?
Soweit Du die Ausgabe des Feldbefehls dadurch ändern willst das Du das Makro änderst wohl nicht.
Lassen sich die mitgelieferten Makros überhaupt verändern?


Ja. Wenn Du über genügend Rechte verfügst kannst Du in der entsprechenden Datei den Schreibschutz für die Bibliothek entfernen. Für die oben diskutierte Funktion wäre zu ändern in der Datei: <OOo-Pfad>\Share\Basic\Tools\script.xlb

library:readonly="true" in library:readonly="false"

Dann kannst Du alle Makros/Funktionen dieser Bibliothek anpassen.
Und wie sähe die fachgerechte Korrektur aus?

Code: Alles auswählen

Function GetFileNameWithoutExtension(ByVal FileName as String, Optional Separator as String)
Dim MaxIndex as Integer
Dim SepList() as String
	If not IsMissing(Separator) Then
		FileName = FileNameoutofPath(FileName, Separator)
	End If
	SepList() = ArrayoutofString(FileName,".", MaxIndex)
	GetFileNameWithoutExtension = RTrimStr(FileName, "." & SepList(MaxIndex)
	'Aenderung 02.02.2005
	GetFileNameWithoutExtension = LEFT(GetFileNameWithoutExtension, 11)
End Function

Gruß
Stephan
Psionwelt
*
Beiträge: 10
Registriert: So, 30.01.2005 18:56

Beitrag von Psionwelt »

Ich wüßte nicht das dieser Feldbefehl mit dem Makro verknüpft ist, hast Du dazu im Internet etwas gefunden?
Nein, das war reine Vermutung.
Schließlich lässt sich "GetFileNameWithoutExtension" gut mit "Dateiname ohne Erweiterung" ins Deutsche übersetzten.
Soweit Du die Ausgabe des Feldbefehls dadurch ändern willst das Du das Makro änderst wohl nicht.
Ich verstehe den Satz zwar nicht ganz, vermute aber, dass Du damit sagen willst, dass sich die Feldbefehle nicht verändern lassen.
Korrekt?
Ja. Wenn Du über genügend Rechte verfügst kannst Du in der entsprechenden Datei den Schreibschutz für die Bibliothek entfernen. Für die oben diskutierte Funktion wäre zu ändern in der Datei: <OOo-Pfad>\Share\Basic\Tools\script.xlb

library:readonly="true" in library:readonly="false"

Dann kannst Du alle Makros/Funktionen dieser Bibliothek anpassen.
Hat funktioniert.

Leider hat die Änderung aber keinen Einfluss auf den Feldbefehl.
Und wenn ich über einen separaten Feldbefehl das Makro "GetFileNameWithoutExtension" ausführen lasse, erhalte ich GAR NICHTS.
Warum nicht?

Alles was ich erreichen will, ist doch die Möglichkeit, den Namen des Dokumentes, auf die ersten 11 Zeichen begrenzt, per Feldbefehl in mein Dokument einzufügen.
Psionwelt
*
Beiträge: 10
Registriert: So, 30.01.2005 18:56

Beitrag von Psionwelt »

Und wieso wird HTML in meinen Postings als Quellcode dargestellt?

Vielleicht sollte ich ein Leben ohne Computer versuchen...
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Nein, das war reine Vermutung.
dann hättest Du das hinschreiben können, denn ich z.B. habe lange nachgedacht ob ich etwas nicht weiß was ich wissen sollte
Schließlich lässt sich "GetFileNameWithoutExtension" gut mit "Dateiname ohne Erweiterung" ins Deutsche übersetzten.

diese Art des Herangehens ist ziemlich orginell
Ich verstehe den Satz zwar nicht ganz, vermute aber, dass Du damit sagen willst, dass sich die Feldbefehle nicht verändern lassen.
Korrekt?

ja
Leider hat die Änderung aber keinen Einfluss auf den Feldbefehl.

genau so ist es
Und wenn ich über einen separaten Feldbefehl das Makro "GetFileNameWithoutExtension" ausführen lasse, erhalte ich GAR NICHTS.
Warum nicht?
Weil das kein Makro, sondern eine Funktion ist die zwei Startparameter erwartet
Alles was ich erreichen will, ist doch die Möglichkeit, den Namen des Dokumentes, auf die ersten 11 Zeichen begrenzt, per Feldbefehl in mein Dokument einzufügen.
Na per Feldbefehl ist das nicht so günstig. Wenns dann aber so sein soll nimm diese Funktion (kopiere sie in das Modul Strings der Bibliothek Tools) und ordne sie dem Feldbefehl Makro ausführen zu:

Code: Alles auswählen

Function test_name()
Dim FileName
Dim Separator
Dim MaxIndex as Integer
Dim SepList() as String
FileName = ThisComponent.URL
Separator = "/" 
If not IsMissing(Separator) Then
	FileName = FileNameoutofPath(FileName, Separator)
End If
SepList() = ArrayoutofString(FileName,".", MaxIndex)
test_name = RTrimStr(FileName, "." & SepList(MaxIndex)
test_name = LEFT(test_name, 11)
End function
Klickst Du auf diesen Feldbefehl ändert sich der Hinweistext in die gewünschten 11 Buchstaben.
Und wieso wird HTML in meinen Postings als Quellcode dargestellt?
Weil Du BBCode deaktiviert hattest, ich habe es jetzt aktiviert

Stephan
Psionwelt
*
Beiträge: 10
Registriert: So, 30.01.2005 18:56

Beitrag von Psionwelt »

Na per Feldbefehl ist das nicht so günstig. Wenns dann aber so sein soll nimm diese Funktion (kopiere sie in das Modul Strings der Bibliothek Tools) und ordne sie dem Feldbefehl Makro ausführen zu:

Code: Alles auswählen

Function test_name()
Dim FileName
Dim Separator
Dim MaxIndex as Integer
Dim SepList() as String
FileName = ThisComponent.URL
Separator = "/" 
If not IsMissing(Separator) Then
	FileName = FileNameoutofPath(FileName, Separator)
End If
SepList() = ArrayoutofString(FileName,".", MaxIndex)
test_name = RTrimStr(FileName, "." & SepList(MaxIndex)
test_name = LEFT(test_name, 11)
End function
Klickst Du auf diesen Feldbefehl ändert sich der Hinweistext in die gewünschten 11 Buchstaben.
Tja, schon wieder etwas, was ich nicht verstehe.
Ich habe die Funktion an die richtige Stelle kopiert, aber wenn ich sie als Feldbefehl Makro ausführen will, passiert NICHTS.

Muss ich OpenOffice danach neu starten, das Makro neu übersetzen lassen oder sonst etwas?

Schöne Grüße,
Psionwelt
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

das Nichts passiert ist ungewöhnlich. Die Frage wäre zunächst ob die Funktion überhaupt gestartet wird. Überprüfe das durch das Einfügen der Zeile:

Code: Alles auswählen

MsgBox "Test"
vor der Zeile:

Code: Alles auswählen

End Function
Nun sollte beim Starten der Funktion in jedem Fall ein Meldungsfenster kommen, sonst hast Du etwas falsch gemacht. (Dann solltest Du mal genau beschreiben wie Du vorgegangen bist.)

Ansonsten sehe ich nur einen Fall das Nichts passiert: Der Feldbefehl Makro ausführen ist ohne Hinweistext eingefügt _und_ Dein Dokument ist noch nicht mit einem Namen gespeichert. Ansonsten sollte immer etwas passieren, möglicherweise etwas Falsches, aber es sollte etwas passieren. Der Grund ist einfach der das wenn die Funktion richtig eingebunden ist und fehlerhaft arbeiten würde gäbe es eine Fehlermeldung. Ist das nicht der Fall würde die Funktion immer eine Rückgabe liefern, entweder richtig oder falsch oder Nichts. Hat der eingefügte Feldbefehl einen Hinweistext, wäre in allen 3 Fällen etwas zu erkennen.

Stephan
Psionwelt
*
Beiträge: 10
Registriert: So, 30.01.2005 18:56

Beitrag von Psionwelt »

Ansonsten sehe ich nur einen Fall das Nichts passiert: Der Feldbefehl Makro ausführen ist ohne Hinweistext eingefügt _und_ Dein Dokument ist noch nicht mit einem Namen gespeichert. Ansonsten sollte immer etwas passieren, möglicherweise etwas Falsches, aber es sollte etwas passieren. Der Grund ist einfach der das wenn die Funktion richtig eingebunden ist und fehlerhaft arbeiten würde gäbe es eine Fehlermeldung. Ist das nicht der Fall würde die Funktion immer eine Rückgabe liefern, entweder richtig oder falsch oder Nichts. Hat der eingefügte Feldbefehl einen Hinweistext, wäre in allen 3 Fällen etwas zu erkennen.
Ich nehme alles zurück und behaupte das Gegenteil.
Das Makro funktioniert einwandfrei.

Was mich zuerst irritiert hat, war der Aufruf. Auch bei eingefügtem Feldbefehl will das Makro von Hand gestartet werden.
Gibt es eine Möglichkeit, den Aufruf automatisch zu starten, wenn der Befehl "Speichern unter" abgeschlossen wurde?

Grüße

Psionwelt
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Was mich zuerst irritiert hat, war der Aufruf. Auch bei eingefügtem Feldbefehl will das Makro von Hand gestartet werden.
Ja genau. Und deshalb hatte ich geschrieben:
Na per Feldbefehl ist das nicht so günstig.
Gibt es eine Möglichkeit, den Aufruf automatisch zu starten, wenn der Befehl "Speichern unter" abgeschlossen wurde?
Pauschal ja, aber ebend nicht das der Hinweistext des Feldbefehls aktualisiert wird. Ein Feldbefehl an dieser Stelle ist ebend ungünstig.


Stephan
Psionwelt
*
Beiträge: 10
Registriert: So, 30.01.2005 18:56

Beitrag von Psionwelt »

Pauschal ja, aber ebend nicht das der Hinweistext des Feldbefehls aktualisiert wird. Ein Feldbefehl an dieser Stelle ist ebend ungünstig.
Das habe ich jetzt ja verstanden.
Aber welche andere Möglichkeit gibt es, das Makro aufzurufen?

Ich möchte diesen Aufruf an einer beliebigen Stelle in einer Dokumentvorlage einzufügen.
Nach dem Ausführen des Befehls "Speichern unter" soll dann der Dateiname (begrenzt auf die ersten 11 Zeichen, versteht sich) automatisch im Dokument eingefügt werden.

Psionwelt
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Aber welche andere Möglichkeit gibt es, das Makro aufzurufen?
Ich würde es einfach mit einer Textmarke machen.

Textmarke in Dokument einfügen Name: "textmarke"
die Funktion um dieses Makro ergänzen:

Code: Alles auswählen

Sub Main
BasicLibraries.LoadLibrary("Tools")
thisComponent.getBookmarks().getByName("textmarke").getAnchor.setString(Test_name())
End Sub
(je nach Deinem Ziel können Makro und Funktion im Dokument oder den OpenOffice-Standardbibliotheken gespeichert werden)

das obenstehende Makro dem Ereignis "Dokument wurde gesichert als" über Extras>Anpassen -->Ereignisse zuordnen

Wenn Du mit speichern unter speicherst werden die 11 Zeichen an die textmarke geschrieben, ohne das Du etwas tun mußt, wie gewünscht:
Nach dem Ausführen des Befehls "Speichern unter" soll dann der Dateiname (begrenzt auf die ersten 11 Zeichen, versteht sich) automatisch im Dokument eingefügt werden.



Stephan
Psionwelt
*
Beiträge: 10
Registriert: So, 30.01.2005 18:56

Beitrag von Psionwelt »

Wenn Du mit speichern unter speicherst werden die 11 Zeichen an die textmarke geschrieben, ohne das Du etwas tun mußt, wie gewünscht:



...und es klappt!

Vielen Dank für die kompetente Hilfe. Das war wirklich klasse.

Peter
Antworten