Seite 1 von 1

Calc Dateiname ohne Endung .ods in Fusszeile

Verfasst: Fr 31. Jul 2020, 08:59
von T F
Guten Tag an alle,

ich habe folgendes Problem. Ich möchte in der Center-Fußzeile von Calc den Dateinamen ohne die Endung .ods angezeigt bekommen. In VBA geht das mit folgendem Makro:

Code: Alles auswählen

Public Sub fußzeile()

  With ActiveSheet.PageSetup
  .CenterFooter = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4)
  End With

End Sub
Wie muss ich das in LibreOffice machen, damit das dort auch funktioniert?
Hat jemand eine Idee und kann mir helfen. Eingebaut werden soll das in dieses Makro:

Code: Alles auswählen

Sub speichern_unter_wep
dim dummy()
myDoc = thisComponent
mySheet = myDoc.sheets(0) '1. Tabellenblatt
namenszelle = mysheet.getCellRangeByName("B2")
parzelle = mysheet.getCellRangeByName("C2")
datumzelle = mysheet.getCellRangeByName("A2")
rem ------------------------------------------

rem ausblenden der 1. Tabelle beim Speichern.

mySheet = myDoc.Sheets().getByName("Grunddateneingabe")
mysheet.isvisible=false

oDoc = ThisComponent   'das Dokumentenobjekt
oSheet = oDoc.sheets(5)  ' das 6. Tabellenblatt Objekt
oCell = oSheet.getCellRangeByName("e36")  'das Objekt der Zelle E36

' wenn Wert = 0 dann wird Tabelle ausgeblendet und der Druckbereich gelöscht

nWert = oCell.value             'Wert der Zelle - Zahlen
   if nwert = 0 then
  dim document   as object
  dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 6

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Protect"
args2(0).Value = false

dispatcher.executeDispatch(document, ".uno:Protect", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$A$1:$G$43"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

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

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())


rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "Nr"
args7(0).Value = 5

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args7())
  
rem -------------
   
   if nwert = 0 then
   mySheet = myDoc.Sheets().getByName("Restwertberechnung")
   mysheet.isvisible=false  
rem löschen vom Druckbereich der Tabelle Restwertberechnung
  end if
   end if
rem define variables
   
'Lesen der Werte
Dateiname= namenszelle.string &"_" & "Parz." & " " & parzelle.string &"_" & datumzelle.string

dateipfad="C:/Temp/"& Dateiname &".ods"
'dein Pfad muss ^^^^^^^^^^^^^^^ dort innerhalb der "-Anführungszeichen stehen !
dateiurl=converttourl(dateipfad)
mydoc.storeasurl(dateiurl,dummy())

End Sub

rem _________________________________________________________________________________________

sub PDF_erstellen
dim dummy1()
myDoc = thisComponent
mySheet = myDoc.sheets(0) 
namenszelle = mysheet.getCellRangeByName("B2")
parzelle = mysheet.getCellRangeByName("C2")
datumzelle = mysheet.getCellRangeByName("A2")
'Lesen der Werte
Dateiname1 = namenszelle.string &"_" & "Parz." & " " & parzelle.string &"_" & datumzelle.string

rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value =  "file:///c:/Temp/"& Dateiname1 &".pdf"
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
args1(2).Name = "FilterData"
args1(2).Value = Array(Array("UseLosslessCompression",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Quality",0,90,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ReduceImageResolution",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("MaxImageResolution",0,300,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTaggedPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SelectPdfVersion",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportNotes",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ViewPDFAfterExport",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarks",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SinglePageSheets",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenBookmarkLevels",0,-1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTransitionEffects",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsSkipEmptyPages",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportPlaceholders",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsAddStream",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportFormFields",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FormsType",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("AllowDuplicateFieldNames",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerToolbar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerMenubar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerWindowControls",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ResizeWindowToInitialPage",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("CenterWindow",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenInFullScreenMode",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("DisplayPDFDocumentTitle",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialView",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Magnification",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Zoom",0,100,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageLayout",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FirstPageOnLeft",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialPage",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Printing",0,2,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Changes",0,4,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableCopyingOfContent",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableTextAccessForAccessibilityTools",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportLinksRelativeFsys",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PDFViewSelection",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ConvertOOoTargetToPDFTarget",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarksToPDFDestination",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Watermark",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPasswords",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPermissionPassword",0,Array(),com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureLocation",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureReason",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureContactInfo",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignaturePassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureCertificate",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureTSA",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseReferenceXObject",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE))
dispatcher.executeDispatch(document, ".uno:ExportToPDF", "", 0, args1())

end sub

sub druckbereich_aus
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 6

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Protect"
args2(0).Value = false

dispatcher.executeDispatch(document, ".uno:Protect", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$A$1:$G$43"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

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

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$E$45"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())


rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "Nr"
args7(0).Value = 5

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args7())


end sub
Vielen Dank schon mal im voraus.
TF.

Re: Calc Dateiname ohne Endung .ods in Fusszeile

Verfasst: Fr 31. Jul 2020, 14:15
von craig
Hallo,

wichtig für folgendes Makro ist, dass es mindestens einmal gespeichert wurde.
Grund: Bei nicht gespeicherten Dokumenten ist die Eigenschaft Dokument.URL = LEER = ""
Dies könnte bei Ausführung des Makros zu einem Runtime-Fehler führen

Beachte die Kommentare im Code!

Code: Alles auswählen

REM  *****  BASIC  *****

Sub DateinameInFussZeile

	' Hier in der Basic-IDE → Objektkatalog
	' LibreOffice Makros & Dialoge → Tools → Strings
	' Lädt die TOOLS-Bibliothek mit vorgefertigten Hilfsfunktionen
	If NOT GlobalScope.BasicLibraries.isLibraryLoaded( "Tools" ) Then
	   GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
	End If
REM Objekt-Referenz
oDoc = thiscomponent

REM Umwandlung der Dokument URL in eine Pfadangabe
sPath=ConvertFromUrl(oDoc.URL)

REM Nutzung der Funktion GetFileNameWithoutExtension() aus der Tools-Bibliothek
REM  → LibreOffice Makros & Dialoge → Tools → Strings
REM Die Funktion "GetFileNameWithoutExtension()" extrahiert aus der Pfadangabe den Dateinamen ohne Extension
sFile=GetFileNameWithoutExtension(sPath)
'print sfile

REM Objektreferenz: Interface → Vorlagen
oStyleFamilies = oDoc.StyleFamilies

REM Welche Vorlage → Seitenvorlage
oPageStyles = oStyleFamilies.getByName("PageStyles")

REM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
REM Name der Seitenvorlage 
REM Name ggf. in die verwendete Seitenvorlage ändern!
oDefPage = oPageStyles.getByName("Standard")

REM Fußzeile einschalten
oDefPage.FooterIsOn = True

REM **********************************************************************
REM Fußzeile der rechten Seiten des Dokuments
HContentR = oDefPage.RightPageFooterContent
'HContentR.CenterText.String = ""

REM Vorbereitung "Dateiname (sFile)" in CenterText.String schreiben
HContentR.CenterText.String = sFile
REM CenterText.String(sFile) in Fußzeile schreiben
oDefPage.RightPageFooterContent = HContentR

'print HContentR.CenterText.String

REM **********************************************************************
REM Fußzeile der linken Seiten des Dokuments
HContentL = oDefPage.LeftPageHeaderContent
'HContentL.CenterText.String = ""

REM Vorbereitung "Dateiname (sFile)" in CenterText.String schreiben
HContentL.CenterText.String = sFile

REM CenterText.String(sFile) in Fußzeile schreiben
oDefPage.LeftPageFooterContent = HContentL
End Sub
Meine Sub-Routine kannst Du aus Deinem Makro heraus an geigneter Stelle aufrufen:

Code: Alles auswählen

DateinameInFussZeile
Eine CALL-Anweisung ist nicht erforderlich:

Code: Alles auswählen

Call DateinameInFussZeile
--------------------------------------------------
Hier habe ich vor kurzem ein paar Info's zur StarBasic-Programmierung geschrieben.

Re: Calc Dateiname ohne Endung .ods in Fusszeile

Verfasst: Fr 31. Jul 2020, 15:09
von T F
Vielen Dank für die ausfühliche Antwort. Werde ich leider erst Morgen testen können.
Gruß
T F

Re: Calc Dateiname ohne Endung .ods in Fusszeile

Verfasst: Mo 3. Aug 2020, 13:11
von T F
Hallo Craig,

habe mal kurz getestet, leider bleibt die Dateiendung erhalten.
Darf ich dich noch mal anschreiben, hab das noch ein zwei Fragen, komme aber in den nächsten Tagen nicht dazu.

mfg
T F.

Re: Calc Dateiname ohne Endung .ods in Fusszeile

Verfasst: Mo 3. Aug 2020, 16:39
von craig
Hallo T F.,
T F. hat geschrieben:habe mal kurz getestet, leider bleibt die Dateiendung erhalten.
Das kann nicht sein.
Habe das Makor bevor ich es gepostet hatte getestet.
Ergebnis war zu dem Zeitpunkt immer Dateiname ohne Extension.

Aber als ich heute meine Testdatei zum Überprüfen des Makro laufen ließ,
machte sich ein anderer Fehler breit.
Es wurde die komplette Pfadangabe mit Dateinamen OHNE Extension in die Fusszeile eingefügt.
Deshalb habe ich das Makro dahingehend geändert.
Siehe Musterdatei und das darin enthaltene Makro:
Calc Test Fußzeile Dateiname ohne Extension.ods
(27.94 KiB) 25-mal heruntergeladen
Habe dies hinzugefügt, um den Dateinamen aus dem Pfad zu extrhieren:

Code: Alles auswählen

REM Nutzung der Funktion GetFileNameWithoutExtension() aus der Tools-Bibliothek
REM  → LibreOffice Makros & Dialoge → Tools → Strings
REM Die Funktion "FileNameoutofPath()" extrahiert aus der Pfadangabe den Dateinamen mit Extension
sFile=FileNameoutofPath(sPath)
Dies habe ich geändert, um aus den Dateinamen OHNE Extension zu extrahieren:

Code: Alles auswählen

REM Nutzung der Funktion GetFileNameWithoutExtension() aus der Tools-Bibliothek
REM  → LibreOffice Makros & Dialoge → Tools → Strings
REM Die Funktion "GetFileNameWithoutExtension()" extrahiert aus dem Dateinamen den Dateinamen ohne Extension
sFile=GetFileNameWithoutExtension(sFile)
'print sfile
Wenn Du vor

Code: Alles auswählen

'print sfile
das Hochkomma entfernst, dann wird Dir bei Ausführung des Makros das Ergebnis der Extrahierung angezeigt.