Libre Office

[Gelöst] Erstellte .cmd Datei wird nicht immer ausgeführt

Alles zur Programmierung im LibreOffice.
Antworten
Nübby
Beiträge: 9
Registriert: Di 22. Sep 2026, 10:19

[Gelöst] Erstellte .cmd Datei wird nicht immer ausgeführt

Beitrag von Nübby » So 27. Sep 2026, 19:13

Hatte erste Beiträge gemacht.
viewtopic.php?f=6&t=42230

Re: Erstellte .cmd Datei wird nicht ausgeführt

Beitrag von Nübby » Sa 26. Sep 2026, 19:59
Ja, das übliche gefrickel mit Basic. Allerdings in recht komplexer Form. Die Tabelle enthält über 10.000 Einträge die über Macros verwaltet werden. Die Datei ist für meine Fotos, Tieraufnahmen gemacht incl. Taxonomie und Metadaten einlesen (über ExifTool) und im Laufe der Jahre gewachsen. Der Grundcode zum erstellen und aufrufen der cmd ist im Original in
Sub aufruf_x(ereignis) ab Zeile 820 und sieht gekürzt so aus:

'...
tmpordner=Environ("TEMP"): if tmpordner="" then tmpordner=Environ("TMP")
tmpordner=tmpordner+"\"
mycell = mysheet1.getCellByPosition(7,zeile): name1=mycell.string `Pfad
mycell = mysheet1.getCellByPosition(2,zeile): name2=mycell.string 'Name
mycell = mysheet1.getCellByPosition(3,zeile): name3=mycell.string 'erw
dname=tmpordner+"aufruf.cmd" :
inh="@Echo off"+chr$(13)+"chcp 1252 >nul"+chr$(13)+chr$(34)+name1+name2+name3+chr$(34)
num3=freefile
open dname for output as #num3
print #num3,inh
close #num3
Shell (dname,4)
'....

mysheet1 ist natürlich vorher definiert. Bevor weitere Nachfragen nach Code kommen - Die komplette Datei ist sehr komplex und beinhaltet U.a. Betriebsystem (Windows/Linux) und Programm (OpenOff/LibreOff) abfragen. Unter Linux habe ich große Probleme mit einigen Befehlen, was aber jetzt gerade nicht das Problem sein soll. (Kann später mal in angriff genommen werden.)
Da unter Libre der Befehl 'dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args2()) ' nicht ausgeführt wird wenn die Spalte Hidden ist, musste ich die Programmversionsabfrage mit einbauen um diese Spalte bei Bedarf vorher Einzublenden.
Die komplette Datei ist im Anhang. Alle eingetragenen Dateien sind natürlich nur auf meinem Recher vorhanden. Das erstellen der cmd sollte aber auch ohne diese gehen.
Dateianhänge
Natur-Tiere_alle.ods
(2.28 MiB) 8-mal heruntergeladen
Zuletzt geändert von Nübby am Mo 28. Sep 2026, 18:02, insgesamt 1-mal geändert.

Nübby
Beiträge: 9
Registriert: Di 22. Sep 2026, 10:19

Re: Erstellte .cmd Datei wird nicht immer ausgeführt

Beitrag von Nübby » So 27. Sep 2026, 20:01

Hallo Karolus
Das mit dem Link statt Umständlichem Dateiaufruf hatte ich früher zuerst versucht. Hat dann nicht mehr funktioniert wenn Datei von wo anders gestartet wurde. (andererem Ordner oder Laufwerk). Auch habe ich im Programm die Möglichkeit eingebaut die gesamte Dateistrucktur (incl. aller Bilder...) auf externe Platte zu kopieren und dort (vom jeweiligen Laufwerk) ebenfalls überall alles Aufrufen zu können. Menüpunkt 'Aufruf vom aktuellen Lw. oder original Pfad'. Ich weiß nicht ob das auch mit (relativen-)Links gehen würde.

Hallo Mikele
Es sind keine Sonderzeichen in den Dateinamen enthalten. Um den Aufruf mit umlauten möglich zu machen wird Codepage 1252 (chcp 1252) vor dem Dateiaufruf ausgeführt. Ich weiß nicht warum die cmd selbst mal so und mal so erstellt wird. Es ist immer die gleiche Routine, Daten werden aus Feldern gelesen, zusammengesetzt und in Datei geschrieben. Es liegt nicht am Ordner der Quell Datei und nicht an der Quell Datei selber. Wenn ich sie kopiere geht es manchmal. Alle Daten sind übrigens unter Openoffice Eingelesen worden und sollten daher auch alle das gleiche Format haben.
Wie bereits geschrieben- unter Libre Version 26.2 gab es dieses Problem nicht. (Ebensowenig unter OpOf). Aufgrund von manchen Vorteilen in Libre würde ich es bevorzugen wenn es darunter weiterhin fehlerlos ginge.

Nochmal meine Frage: Warum wird die cmd Datei mal mit diesem und mal mit dem anderen Mime Typ erstellt. Kann ich das noch irgendwie beeinflussen.

Danke auf jeden Fall schon mal dafür, das ihr euch damit beschäftigt habt.

mikele
* LO-Experte *
Beiträge: 2074
Registriert: Mo 1. Aug 2011, 20:51

Re: Erstellte .cmd Datei wird nicht immer ausgeführt

Beitrag von mikele » Mo 28. Sep 2026, 07:33

Hallo,
Kann ich das noch irgendwie beeinflussen.
Meines Wissens nicht (ich habe nichts gefunden, woraus hervorgeht, welchen Zeichensatz open-print-close nutzt. Wie ich schon schrieb, ist es per SimpleFileAccess möglich.
Gruß,
mikele

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2752
Registriert: Fr 10. Dez 2010, 10:01

Re: Erstellte .cmd Datei wird nicht immer ausgeführt

Beitrag von karolus » Mo 28. Sep 2026, 08:29

Versuchs mal mit »put« anstatt »print« in Zeile 853

Code: Alles auswählen

 put #num3,inh
Aber wie gesagt, das ist und bleibt umständliches Gefrickel! Eigenlich schade, denn ansonsten scheinst du da relativ solide gearbeitet zu haben.
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

Nübby
Beiträge: 9
Registriert: Di 22. Sep 2026, 10:19

Re: Erstellte .cmd Datei wird nicht immer ausgeführt

Beitrag von Nübby » Mo 28. Sep 2026, 15:49

Das mit put# (Open binary.. put#..) hat es an dieser Stelle gar nicht getan - warum auch immer. Werde jetzt mal den Weg über den Service com.sun.star.ucb.SimpleFileAccess ausprobieren (muß mich da erst reinarbeiten, was etwas länger dauern kann). Werde berichten wenn es so weit ist.

Nübby
Beiträge: 9
Registriert: Di 22. Sep 2026, 10:19

Re: Erstellte .cmd Datei wird nicht immer ausgeführt

Beitrag von Nübby » Mo 28. Sep 2026, 18:01

Ich habe das Problem identifiziert. Tatsächlich wird die cmd Datei sofort mit mime utf-8 deklariert sobald ein Umlaut innerhalb dieser Datei ist. Damit wird dann diese Datei unter Win11 nicht mehr ausgeführt. Diese Deklaration wurde jetzt wohl auch in Libre übernommen. (Wie bereits gesagt, in früheren Versionen ging es.) Das mir das erst jetzt aufgefallen ist liegt an meiner sporadischen Unfähigkeit auch ein ß im Text nicht gleich als Umlaut zu erkennen. Ich hatte es vorher noch mit SimpleFileAccess probiert. Aber dann wurde gar kein Aufruf mehr gestartet. Wen meine versuche damit Interessieren, hier die ersetzte Routine:

'neue schreib routine
Dim oSFA ' Der Service SimpleFileAccess.
Dim sFileName$ ' Name der zu öffnenden Datei.
Dim oStream ' Der von SimpleFileAccess zurückgegebene Stream.
Dim oTextStream ' Der Service TextStream.
Dim sStrings ' Strings für den Lese-/Schreibtest.
Dim sInput$ ' Der gelesene String.
Dim s$ ' Ausgabestring.
Dim i% ' Indexvariable.
If IsRootDir Then Exit Sub
sStrings = Array("Eins", "UTF:Āā", "1@3") ' Die Testdatei.
sFileName = dname 'CurDir() & "/WegMitMir.out"
oSFA = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")' Erzeugt den Service SimpleFileAccess.
oTextStream = CreateUnoService("com.sun.star.io.TextOutputStream")' Erzeugt den Schreibstream.
If oSFA.exists(sFileName) Then
oSFA.kill(sFileName)'Falls die Datei schon existiert, wird sie gelöscht.
End If
oStream = oSFA.openFileWrite(sFileName)' Die Datei wird zum Schreiben geöffnet.
' Verknüpft den einfachen Stream mit dem Textstream.
oTextStream.setOutputStream(oStream)' Der Textstream wird den einfachen Stream nutzen.
sStrings(1)=inh
'For i = LBound(sStrings) To UBound(sStrings) ' Schreibt die Strings.
oTextStream.writeString(sStrings(1) )
'Next
oTextStream.closeOutput()' Schließt den Stream.

' alte schreib routine
' num3=freefile
' open dname for output as #num3
' print #num3,inh
' close #num3

Die Datei wurde erstellt, ließ sich jedoch nie starten - auch die ohne Umlaute nicht mehr.

Jetzt muß ich mir eine Routine schreiben die mir die Umlaute im Text nach us-ascii umwandelt und dann mal sehen ob ich die Dateien noch irgendwie aufrufen kann. Aber ein Identifiziertes Problem kann schnell ein gelöstes Problem werden.
Damit werde ich dieses hier als gelöst betrachten.

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2752
Registriert: Fr 10. Dez 2010, 10:01

Re: Erstellte .cmd Datei wird nicht immer ausgeführt

Beitrag von karolus » Mo 28. Sep 2026, 18:28

Die ganze Akrobatik um die Pfade in eine temporäre Datei zu schreiben, könntest du mit python in 5 Zeilen erschlagen:

Code: Alles auswählen

from tempfile import NamedTemporaryFile as temp
from pathlib import Path

temp_path = Path( temp().name ).with_suffix('.cmd')
with temp_path.open( 'w', encoding='utf8') as temp_file:
    temp_file.write('/dein/pfad/zu/bildxyz.jpg')
bräuchtest du aber garnicht, weil du den externen Kommandoaufruf auch schon gleich in python erledigen könntest:

Code: Alles auswählen

from subprocess import Popen

#bsplhaft für Linux
Popen(['xdg-open', 'dein/pfad/zum/bildxyz.jpg'])
bräuchtest du aber ebenfalls nicht, weil du vernünftigerweise gleich in Calc ( den Rest wiederhole ich nicht )


disclaimer: alle python-Codebeispiele gelten nur für Libreoffice … Die Museumswärter von AOO habens leider komplett verpennt von python2.7 auf python3.x umzusteigen.
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2752
Registriert: Fr 10. Dez 2010, 10:01

Re: [Gelöst] Erstellte .cmd Datei wird nicht immer ausgeführt

Beitrag von karolus » Mo 28. Sep 2026, 20:09

Hallo
die mir die Umlaute im Text nach us-ascii umwandelt
Umlaute können nicht in »ascii« encodiert werden!!!

siehe auch https://discuss.python.org/t/choosing-c ... popen/3388

und falls ich das richtig verstehe, könntest du statt 'utf8' 'utf16' ausprobieren ?!
LO25.2.x.y debian 13(trixie) auf Raspberry5 8GB (64bit)
LO25.8.x.y flatpak debian 13(trixie) auf Raspberry5 8GB (64bit)

Nübby
Beiträge: 9
Registriert: Di 22. Sep 2026, 10:19

Re: [Gelöst] Erstellte .cmd Datei wird nicht immer ausgeführt

Beitrag von Nübby » Mo 28. Sep 2026, 22:18

Ist mir jetzt auch aufgefallen. Die Encodierung von der cmd Datei kann ich beim erstellen nicht beeinflussen.
Ich verwende jetzt einfach die Portable Version 26.2.4.2. Damit läuft einfach alles wie es ursprünglich war. Die erstellt die cmd übrigens mit iso-8859-1 Encodierung.

Open Office
Antworten