Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: PDF Seiten zählen

PDF Seiten zählen
17.05.2019 08:48:19
Jakob
Hallo zusammen,
Ich habe um die 100 PDF Dateien, von denen ich gern die Seitenzahlen eines bestimmten Kapitels zählen würde.
Im Archiv hab ich diesen Code gefunden https://www.herber.de/forum/archiv/1556to1560/1557305_PDF_Seitenanzahl_feststellen.html, da muss ich allerdings erst recht wieder jedesmal ein pdf auswählen.
Nun hab ich in meiner Excel Datei die Idee, in Spalte A die Dateinamen zu haben (schaffe ich mit VBA), und dann in Spalte B die dazugehörige Seitenzahl (schaffe ich nicht mit VBA) (idealerweise nur von Kapitel 2, aber auch die Gesamtseitenzahl des Dokuments würd mir schon helfen.
Jemand mit besseren VBA-Kenntnissen als ich eine Idee, wie das umzusetzen ist?
Hochgeladene Datei: https://www.herber.de/bbs/user/129835.xlsm
Im Voraus vielen Dank!
Jakob
Option Explicit
Public Sub PDFCounter()
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
With .Filters
If .Count > 0 Then .Delete
Call .Add(Description:="PDF-Dateien", Extensions:="*.pdf")
End With
If .Show Then
Cells(2, 2).Value = GetPageCount(.SelectedItems(1))
End If
End With
End Sub
Private Function GetPageCount(ByVal pvstrFileName As String) As Long
Dim strText As String
Dim strLinearized As String, astrCount() As String
Dim ialngIndex As Long
Dim objFileSystemObject As Object, objTextFile As Object
Dim objRegEx As Object, objMatch As Object, objItem As Object
Dim blnFound As Boolean
GetPageCount = -1
Set objFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFileSystemObject.OpenTextFile(pvstrFileName, 1, False, 0)
Do Until objTextFile.AtEndOfStream
strText = objTextFile.ReadLine
strText = Replace(strText, vbLf, vbNullString)
If CBool(InStr(1, strText, "/Linearized")) Then
If Len(strText) > 20 Then
strLinearized = strText
blnFound = True
Exit Do
End If
End If
If CBool(InStr(1, strText, "/Count ")) Then
ReDim Preserve astrCount(ialngIndex)
astrCount(ialngIndex) = strText
ialngIndex = ialngIndex + 1
blnFound = True
End If
Loop
Call objTextFile.Close
Set objTextFile = Nothing
Set objFileSystemObject = Nothing
If blnFound Then
Set objRegEx = CreateObject("VBScript.RegExp")
With objRegEx
.MultiLine = True
.Global = True
.IgnoreCase = False
If strLinearized  vbNullString Then
.Pattern = "\/N.?(\d+).?"
Set objMatch = .Execute(strLinearized)
If objMatch.Count > 0 Then _
GetPageCount = CLng(objMatch(0).SubMatches(0))
Else
If ialngIndex = 1 Then
.Pattern = "\/Count.?(\d+)"
Set objMatch = .Execute(astrCount(0))
If objMatch.Count = 1 Then
GetPageCount = CLng(objMatch(0).SubMatches(0))
Else
For Each objItem In objMatch
GetPageCount = WorksheetFunction.Max( _
GetPageCount, CLng(objItem.SubMatches(0)))
Next
End If
Else
.Pattern = "\/Count.?(-?\d+)"
For ialngIndex = 0 To UBound(astrCount)
Set objMatch = .Execute(astrCount(ialngIndex))
GetPageCount = WorksheetFunction.Max( _
GetPageCount, CLng(objMatch(0).SubMatches(0)))
Next
End If
End If
End With
Set objMatch = Nothing
Set objRegEx = Nothing
End If
End Function

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PDF Seiten zählen
17.05.2019 08:52:41
Jakob
edit, hätte doch länger googeln sollen, zumindest die Gesamtzahl plus Dateinamen lässt sich mit diesem Code feststellen.
Geht das irgendwie für ein bestimmtes Kapitel auch?
Lösung für alle:
Sub Test()
Dim I As Long
Dim xRg As Range
Dim xStr As String
Dim xFd As FileDialog
Dim xFdItem As Variant
Dim xFileName As String
Dim xFileNum As Long
Dim RegExp As Object
Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
If xFd.Show = -1 Then
xFdItem = xFd.SelectedItems(1) & Application.PathSeparator
xFileName = Dir(xFdItem & "*.pdf", vbDirectory)
Set xRg = Range("A1")
Range("A:B").ClearContents
Range("A1:B1").Font.Bold = True
xRg = "File Name"
xRg.Offset(0, 1) = "Pages"
I = 2
xStr = ""
Do While xFileName  ""
Cells(I, 1) = xFileName
Set RegExp = CreateObject("VBscript.RegExp")
RegExp.Global = True
RegExp.Pattern = "/Type\s*/Page[^s]"
xFileNum = FreeFile
Open (xFdItem & xFileName) For Binary As #xFileNum
xStr = Space(LOF(xFileNum))
Get #xFileNum, , xStr
Close #xFileNum
Cells(I, 2) = RegExp.Execute(xStr).Count
I = I + 1
xFileName = Dir
Loop
Columns("A:B").AutoFit
End If
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

PDF Seiten zählen in Excel


Schritt-für-Schritt-Anleitung

Um die Seitenzahlen eines PDF-Dokuments in Excel zu zählen, kannst du VBA (Visual Basic for Applications) verwenden. Hier ist eine einfache Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub PDFSeitenZaehlen()
       Dim I As Long
       Dim xRg As Range
       Dim xFd As FileDialog
       Dim xFileName As String
       Dim xFileNum As Long
       Dim RegExp As Object
    
       Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
       If xFd.Show = -1 Then
           xFileName = Dir(xFd.SelectedItems(1) & "\*.pdf")
           Set xRg = Range("A1")
           Range("A:B").ClearContents
           Range("A1:B1").Font.Bold = True
           xRg = "Dateiname"
           xRg.Offset(0, 1) = "Seitenzahl"
           I = 2
    
           Do While xFileName <> ""
               Cells(I, 1) = xFileName
               Set RegExp = CreateObject("VBscript.RegExp")
               RegExp.Global = True
               RegExp.Pattern = "/Type\s*/Page[^s]"
               xFileNum = FreeFile
               Open (xFd.SelectedItems(1) & "\" & xFileName) For Binary As #xFileNum
               Dim xStr As String
               xStr = Space(LOF(xFileNum))
               Get #xFileNum, , xStr
               Close #xFileNum
               Cells(I, 2) = RegExp.Execute(xStr).Count
               I = I + 1
               xFileName = Dir
           Loop
           Columns("A:B").AutoFit
       End If
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Führe das Makro aus: Drücke ALT + F8, wähle PDFSeitenZaehlen und klicke auf Ausführen.

Dieses Skript zählt die Seitenzahlen zum PDF und gibt sie in der Excel-Tabelle aus.


Häufige Fehler und Lösungen

  • Fehler: "Datei kann nicht geöffnet werden"
    Lösung: Stelle sicher, dass die PDF-Dateien nicht beschädigt sind und du die richtigen Berechtigungen hast.

  • Fehler: Keine Seitenzahlen angezeigt
    Lösung: Überprüfe, ob das PDF-Dokument tatsächlich Seiten enthält und ob der Code korrekt kopiert wurde.

  • Fehler bei der Ausführung des Makros
    Lösung: Stelle sicher, dass Makros in Excel aktiviert sind. Gehe zu Datei > Optionen > Trust Center > Einstellungen für das Trust Center > Makroeinstellungen und aktiviere die entsprechenden Optionen.


Alternative Methoden

Wenn du keine VBA-Programmierung verwenden möchtest, gibt es auch Online-Tools, die dir helfen, die Seitenzahlen eines PDF-Dokuments zu zählen. Diese Tools können schnell und einfach die PDF-Seitenzahl ermitteln, erfordern jedoch oft das Hochladen der Datei.


Praktische Beispiele

  1. Gesamtseitenzahl zählen: Nutze den oben genannten VBA-Code, um die Gesamtseitenzahl aller PDF-Dateien in einem Verzeichnis zu zählen.
  2. Kapitel-spezifische Seiten zählen: Anpassungen im Code sind nötig, um die Seitenzahlen für ein bestimmtes Kapitel zu zählen. Hierfür müsstest du die Struktur der PDF-Dateien kennen und den Code entsprechend anpassen.

Tipps für Profis

  • Reguläre Ausdrücke: Nutze die Flexibilität von regulären Ausdrücken (RegExp), um spezifische Informationen aus den PDF-Dateien zu extrahieren, wie z.B. die Seitenzahlen für spezifische Kapitel.
  • Automatisierung: Du kannst das PDF-Seiten zählen in einen größeren Prozess integrieren, um auch andere Daten wie Wörter zählen PDF oder Zeichen zählen PDF zu erfassen.

FAQ: Häufige Fragen

1. Kann ich die Seitenzahlen für mehrere PDF-Dateien gleichzeitig zählen?
Ja, das Skript ist so konzipiert, dass es alle PDF-Dateien in einem ausgewählten Ordner verarbeitet.

2. Gibt es eine Möglichkeit, auch Wörter in PDFs zu zählen?
Ja, du kannst den Code erweitern, um Text aus den PDF-Dateien auszulesen und die Gesamtanzahl der Wörter zu zählen.

3. Funktioniert dieser Code in jeder Excel-Version?
Der Code sollte in Excel 2010 und späteren Versionen funktionieren, die VBA unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige