BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Ordnerinhalt auflisten als Hyperlink ...

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
steven84
Beiträge: 7
Registriert: Sa 24. Aug 2019, 21:25

Ordnerinhalt auflisten als Hyperlink ...

Beitrag von steven84 » So 25. Aug 2019, 16:43

Hallo liebe LibreOffice Community,

ich benutze erst seit kurzen LibreOffice. Eine Antwort auf mein Anliegen via Suchmaschine noch hier im Forum lieferten leider keine passenden Ergebnisse und ich hoffe ihr könnt mir helfen.

Folgendes:
Ich habe einen Ordner, in diesem sind auch Unterordner enthalten, darin natürlich Dateien.
Diese Dateien sollen nun aufgelistet und als Hyperlink ausgeben werden, wenn möglich über eine Schaltfläche.
Da sich die Dateien auch mal ändern, wäre es nicht schlecht, wenn vorher die Auflistung gelöscht wird wenn über die Schaltfläche neu eingelesen werden soll.

Ist so etwas mit LibreOffice Calc möglich?

Noch etwas: Ist es möglich, sobald also die Dateien als Hyperlink aufgelistet sind, sobald man auf die Verlinkung klickt das sich ein vorher im Code festgelegten Programm zu öffnen um die Datei anzuzeigen?
Z.b.: Die Verlinkung ist eine PDF, sobald man dort draufklickt öffnet sich ja der Adobe Reader. Es soll sich aber ein anderer PDF-Viewer öffnen.

Ich hoffe ich hab mich einigermaßen verständlich ausgedrückt.

Erstmal vielen Dank für eure Aufmerksamkeit und hoffe ihr könnt hierbei helfen.
Vielen Dank im voraus!!!

mfg
steven

musikai
Beiträge: 262
Registriert: Do 14. Mai 2015, 17:53

Re: Ordnerinhalt auflisten als Hyperlink ...

Beitrag von musikai » Mo 26. Aug 2019, 13:16

Folgendes Macro listet alle PDFs aus dem angebenen Order (und allen Unterordnern) auf.

Code: Alles auswählen

sub PDF_Hyperlinks
dim liste()
Folderpath="E:\PDF"   'edit your path here

calc_delete_all
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then GlobalScope.BasicLibraries.LoadLibrary("Tools")
Tabelle = Thiscomponent.getSheets().getbyIndex(0)
getdirs( liste(),z, Folderpath)

i=0
For il = 0 to ubound(liste())
if GetFileNameExtension(liste(il))="pdf" then 
Tabelle.getCellbyPosition(0,i).formulaLocal = "=HYPERLINK(" & chr(34) & ConvertFromURL(liste(il)) & chr(34) & ";" & chr(34) & ConvertFromURL(Filenameoutofpath(liste(il),"/")) & chr(34) &")"
i=i+1
end if
next il

rem---Tabelle sortieren
sortier_Tabelle(Tabelle,i)

end sub


sub calc_delete_all
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 ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())

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


end sub

function getdirs( liste(),z, Folder) 
on error goto skip
   sFolderUrl = ConvertToUrl( Folder )
   oSimpleFileAccess = createUnoService( "com.sun.star.ucb.SimpleFileAccess" )
   aFolders = oSimpleFileAccess.getFolderContents( sFolderUrl,true )
   For i = LBound( aFolders ) To UBound( aFolders )
     sFile = aFolders( i )
     If oSimpleFileAccess.isFolder( sFile ) Then
        getdirs( liste(),z, sFile)
      Else
      	redim preserve liste(z)
        liste(z)=sFile
        z=z+1
     end if  
   next i    
skip:
   getdirs=z+1
end function

sub sortier_Tabelle(oTable,rows)
Dim SortProps(2) As new com.sun.star.beans.PropertyValue
Dim SortFeld(0) As new com.sun.star.table.TableSortField
SortierBereich = oTable.getCellRangeByName("A1:A"+rows)

SortFeld(0).Field = 0
SortFeld(0).IsAscending = True
SortFeld(0).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC
 
SortProps(0).Name = "SortFields"
SortProps(0).Value = SortFeld()
SortProps(1).Name = "SortColumns"
SortProps(1).Value = False
SortProps(2).Name = "ContainsHeader"
SortProps(2).Value = False 
SortierBereich.Sort(SortProps())
end sub
Hyperlinks werden immer mit dem assoziierten Programm geöffnet. Musst Du also im Betriebssystem ändern.

Oder: Wenn eine Zeile ausgewählt ist, oder auch nur eine Zelle einer Zeile, dann öffnet folgendes Makro das PDF mit dem angegebenen Programm:

Code: Alles auswählen

sub open_pdf_in_app
PDF_App="E:\Installationsprogramme\Sumatra\SumatraPDF.exe"   'edit this path
g = ThisComponent.CurrentSelection(0)
 If g.supportsService("com.sun.star.table.Cell") Then
 currentrow=g.getCellAddress().Row
 else
 currentrow=g.getRangeAddress().EndRow
 end if

Tabelle = Thiscomponent.getSheets().getbyIndex(0)

sFormular= Tabelle.getCellbyPosition(0,currentrow).formulaLocal
sFormulararray= split(sFormular,"""")
PDF_path=sFormulararray(1)

Shell(PDF_App,0, """" & PDF_path & """", false)
end sub
Dateianhänge
PDF_Hyperlinks.ods
Mit Mini Toolbar
(10 KiB) 241-mal heruntergeladen
Win7 Pro, Sibelius 7.1.3, Lubuntu 15.10, LibO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html

steven84
Beiträge: 7
Registriert: Sa 24. Aug 2019, 21:25

Re: Ordnerinhalt auflisten als Hyperlink ...

Beitrag von steven84 » Di 27. Aug 2019, 12:46

Hallo liebe Community,
hallo lieber User musikai,

sorry das ich jetzt erst Antworte.
Zunächst einmal vielen Dank für deine Antwort und gleich nochmal vielen lieben Dank für deine Codes & Beispiel-Datei. So einen Service hab ich nicht
erwartet.

Es funktioniert alles so wie ich es mir vorgestellt habe. D A N K E

mfg
steven

musikai
Beiträge: 262
Registriert: Do 14. Mai 2015, 17:53

Re: Ordnerinhalt auflisten als Hyperlink ...

Beitrag von musikai » So 1. Sep 2019, 22:59

Schön, dass es funktionert!

Kleine Verbesserung wäre noch, im ersten Macro folgende Zeile:

Code: Alles auswählen

if GetFileNameExtension(liste(il))="pdf" then 
zu ersetzen mit

Code: Alles auswählen

if lcase(GetFileNameExtension(liste(il)))="pdf" then 
damit auch Dateien mit der Endung ".PDF" oder ".Pdf" etc. und nicht nur die kleingeschriebene Version ".pdf" gefunden werden.

Jaja, Details überall
Win7 Pro, Sibelius 7.1.3, Lubuntu 15.10, LibO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html

musikai
Beiträge: 262
Registriert: Do 14. Mai 2015, 17:53

Re: Ordnerinhalt auflisten als Hyperlink ...

Beitrag von musikai » Do 5. Sep 2019, 15:01

Weil ichs eh schonmal vorhatte, kommt hier der Nachfolger.

In der angehängten ods-Datei befindet sich eine Toolbar mit 4 Buttons. Man kann alle PDFs eines gewählten Ordners (optional mit Unterordnern) als Hyperlinks auflisten. Neben der Standard-Methode (strg-click auf Hyperlink) kann ein selbst-voreingestelltes Programm zum Öffnen verwendet werden.

Wenn man das Kommandozeilen-Programm pdftk installiert hat, hat man zusätzliche Funktionen zur Verfügung:
  • Die Auflistung listet auch Seitenanzahl und Metadaten der PDFs auf.
  • Man kann Metadaten zurück in PDFs schreiben.
  • Man kann PDFs zusammenfügen. (merge)
Es gibt 4 Buttons auf der Toobar:
1.ListPDFs
Bitte die ersten Zeilen in Sub listPDFs anpassen, v.a. ob man pdftk benützt oder nicht

Code: Alles auswählen

sub listPDFs
Folderpath="E:\PDF"   'edit your default path here
subdirs=1   'to not list subfolders use subdirs=0
pdftkapp="pdftk"   'if you don't use pdftk then use: pdftkapp=""
Es öffnet sich eine Ordner-Auswahl und bekommt eine Liste mit folgenden Einträgen:

Ohne pdftk:

Code: Alles auswählen

Dateiname(mit Hyperlink) - Size
Mit pdftk werden auch die Seitenzahlen und alle verfügbaren PDF-MetaDaten gelistet:

Code: Alles auswählen

Dateiname(mit Hyperlink) - Size - Pages - Title - Author - Subject - Keywords - ...
PDF-List.PNG
PDF-List.PNG (33.08 KiB) 5360 mal betrachtet
Wenn hinter einer PDF die Seitenzahl leer ist, dann wurde dieses PDF übersprungen, weil es z.B. passwortgeschützt ist.

2.open_pdf_in_app
Das PDF in dessen Zeile der Cursor steht wird in einem angegeben externen Programm geöffnet.
Bitte in der ersten Zeile in sub open_pdf_in_app den Pfad zum externen Programm angeben.

Code: Alles auswählen

sub open_pdf_in_app
PDF_App="E:\Installationsprogramme\Sumatra\SumatraPDF.exe"   'edit this path

Die nächsten beiden Buttons funktionieren nur mit installiertem pdftk:
3.Write_Info_to_new_PDF(s)
Die Metadaten aller PDFs eines ausgewählten Bereichs werden in die PDFs geschrieben. Die Original-Datei wird in einen Unter-Ordner "!.OriginalPDFs" verschoben, sodass man immer auf der sicheren Seite bleibt. (Dieser Unterordner wird bei der Auflistung mit Button 1 stets ausgelassen)

Man kann auch eigene neue Meta-Daten-Felder (in der Kopfzeile) anlegen.Nur Ausgefüllte Zellen werden in ein neues PDF geschrieben.
PDFs ohne Seitenzahlen werden übersprungen, da diese höchstwahrscheinlich passwortgeschützt sind.


4.mergePDFs
Alle PDFs eines ausgewählten Bereichs werden in ein neues PDF zusammengesetzt. Diese hat den Namen "mergedPDFs.pdf" und befindet sich im Verzeichnis wie in Zelle A1 angegeben.
Dateianhänge
PDF_List.ods
(13.41 KiB) 159-mal heruntergeladen
Win7 Pro, Sibelius 7.1.3, Lubuntu 15.10, LibO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html

steven84
Beiträge: 7
Registriert: Sa 24. Aug 2019, 21:25

Re: Ordnerinhalt auflisten als Hyperlink ...

Beitrag von steven84 » Fr 14. Feb 2020, 15:09

Hallo (mal wieder),

ich habe (wollte) obigen Code zum einlesen von PDF's nutzen um Dateilisten zu erstellen. Habe den Code soweit verändert das nun alle Dateien aufgelistet werden. So weit, so gut.

Da es mehrere Ordner gibt, sind auch mehrere Tabellenblätter vorhanden. Für jedes Tabellenblatt/Ordner gibt es ein Makro das per Schaltfläche angesprochen wird und den Inhalt des Ordners auflistet.
Das funktioniert FAST.
Sobald eine Datei gelöscht wird, wird eine andere komischerweise doppelt aufgelistet und sobald mal ein Ordner leer ist kommt ne Fehlermeldung. Auch habe ich das Gefühl das die vorhanden Datensätze vorher nicht richtig gelöscht werden bevor neu eingelesen wird -> Alles konnte ich auch mit obigen Code/Datei reproduzieren.

Ich würde den Code auch etwas mehr modifizieren: Kein Hyperlink, sondern einfach als Text.
In Spalte A möchte ich wie jetzt auch, nur den Dateinamen mit Endung und in Spalte B möchte ich den Pfad aufgelistet haben.

Und die Auflistung soll erst ab Zeile 4 beginnen, da ich noch im Bereich Zeile 2 mir eine Angabe vorstelle, wieviel Dateien der Ordner enthält, ungefähr so:
Bild

Sobald allerdings neu eingelesen werden soll sind auch die Angaben/Überschriften und ggf. Formeln weg.
Im Anhang findet sich noch eine Test-Datei.

Lg
steven
Dateianhänge
Test-Dateiliste.ods
(14.64 KiB) 155-mal heruntergeladen

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Ordnerinhalt auflisten als Hyperlink ...

Beitrag von mikele » Fr 14. Feb 2020, 15:19

Hallo,
hier ist ein vergleichbares Thema (dasselbe?) aktiv: http://de.openoffice.info/viewtopic.php?f=18&t=74379
Gruß,
mikele

steven84
Beiträge: 7
Registriert: Sa 24. Aug 2019, 21:25

Re: Ordnerinhalt auflisten als Hyperlink ...

Beitrag von steven84 » Di 18. Feb 2020, 12:56

Hallo ihr lieben.
Bin die letzten Tage etwas weiter gekommen.
Habe mir zur Sicherheit ein zusätzliches Makro zum löschen des Inhalts erstellt. Die Aufzählung der Dateien geht nun auch automatisch.

Das einzigste was ich nicht hinkriege ist, das beim Pfad wirklich nur der Pfad ausgegeben wird und nicht noch der Dateiname.

Zumindest kann ich damit erstmal arbeiten.
Dateianhänge
Dateiliste.ods
(13.6 KiB) 184-mal heruntergeladen
Zuletzt geändert von steven84 am Mi 19. Feb 2020, 13:29, insgesamt 1-mal geändert.

craig
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: Ordnerinhalt auflisten als Hyperlink ...

Beitrag von craig » Di 18. Feb 2020, 14:55

Hallo steven84,
steven84 hat geschrieben:Das einzigste was ich nicht hinkriege ist, das beim Pfad wirklich nur der Pfad ausgegeben wird und nicht noch der Dateiname.
Nutze die Funktionen der mitgelieferten Tools-Bibliothek.
In Deinen Codes lädst Du diese bereits.

Hier ein Beispiel, wie der im Code angegebene Pfad, mittels der
Tools-Funktionen zerlegt und dann ausgegeben wird.

Das Ergebnis wird in einer Messagebox ausgegeben:

Code: Alles auswählen

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

Sub ToolsFunktionen
sPath="C:\Temp\Dateiliste.ods"
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then GlobalScope.BasicLibraries.LoadLibrary("Tools")

' Dateiname mit Extension:
' Function FileNameoutofPath(ByVal Path as String, Optional Separator as String) as String
sFileName =FileNameoutofPath(sPath,"\")

' Dateiname ohne Extension
' Function GetFileNameWithoutExtension(ByVal FileName as String, Optional Separator as String)
sOnlyFileName = GetFileNameWithoutExtension(sFileName)

' Nur Extension
' Function GetFileNameExtension(ByVal FileName as String)
sExt=GetFileNameExtension(sFileName)

' Nur Pfad
' Function DirectoryNameoutofPath(sPath as String, Separator as String) as String
sDir= DirectoryNameoutofPath(sPath,"\")

Msgbox "Dateiname mit Extension: " & chr(10) & sFileName & chr(10) & chr(10) &_
			"Dateiname ohne Extension: " & chr(10) & sOnlyFileName & chr(10) & chr(10) &_
			"Nur Extension: " & chr(10) & sExt & chr(10) & chr(10) &_
			"Nur Pfad: " & chr(10) & sDir & chr(10),64, "Funktionen aus der Tools-Bibliothek"


End Sub
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

steven84
Beiträge: 7
Registriert: Sa 24. Aug 2019, 21:25

Re: Ordnerinhalt auflisten als Hyperlink ...

Beitrag von steven84 » Mi 19. Feb 2020, 13:40

Hallo ihr lieben, hallo craig.

Danke für den Tipp!
Nachdem ich die Zeile:

Code: Alles auswählen

Tabelle.getCellbyPosition(1,i).formulaLocal = ConvertFromURL(liste(il))
in:

Code: Alles auswählen

Tabelle.getCellbyPosition(1,i).formulaLocal = ConvertFromURL(DirectoryNameoutofPath(liste(il),"/"))
geändert habe wird jetzt auch nur noch der Pfad ausgegeben.

Zusätzlich musste ich im Code den Sortierbereich auf B erweitern, sonst werden Dateien in Ordnern angezeigt die gar nicht dort sind.

Habe die fertige Datei in meinem letzten Post mit Anhang neu angefügt.

An dieser Stelle will ich euch ganz herzlich danken für eure Unterstützung, Zeit und vor allem Geduld.

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten