Saltar al contenido

Busque en un PDF una cadena de texto con VBA para Excel

    En este artículo, veremos cómo buscar y resaltar una cadena de texto en un archivo PDF con Excel VBA. Veremos dos ejemplos, uno que funciona con Acrobat Reader y un segundo que debe usarse si tiene una versión con licencia de Acrobat Pro.

    Ejemplo 1: uso de SendKeys en Acrobat Reader

    En esto, simplemente abrimos el archivo PDF especificado usando FollowHyperlink. A continuación, usaremos la función SendKeys para invocar primero la búsqueda (usando Ctrl + F), escribir la cadena de búsqueda y enviar la tecla «enter» para realizar la búsqueda real. Aquí está el código completo. Puedes seguir los comentarios en el código.

    Sub SearchStringInPDF()
    
        Dim PDF_path As String
        Dim searchString As String
        Dim waitTime As Date
    
        Application.DisplayAlerts = False
    
        'Make sure to provide a complete path to the PDF here
        'if your Excel and PDF are in separate folders
        PDF_path = "search.pdf"
    
        'Your search string - case-insensitive, as in actual PDF search
        searchString = "sample"
    
        'Open the pdf file
        ThisWorkbook.FollowHyperlink PDF_path
    
        'Wait time for a couple of seconds for the PDF file to fully load
        waitTime = Now
        While DateDiff("s", waitTime, Now) &> 2
            DoEvents
        Wend
    
        'Send "CTRL + F" keys to the opened PDF to invoke find within that file
        'The second argument "true" implies that Excel will wait for the keys to be processed
        'before returning control to the macro.
        SendKeys "^f", True
    
        'Type the search string in the find box that opens
        SendKeys searchString, True
    
        'Hit enter to perform the search
        SendKeys "{Enter}", True
    
        Application.DisplayAlerts = True
    
    End Sub
    
    

    Cuando ejecuta este código, el archivo PDF recibe el foco y la cadena de búsqueda se resalta, así

    Search Busque en un PDF una cadena de texto con VBA para Excel

    Tenga en cuenta que SendKeys puede no ser confiable, especialmente porque literalmente envía el comando (teclas) a la ventana activa. Entonces, si accidentalmente activa otra ventana mientras ejecuta la macro, no dará los resultados deseados. No siempre es posible garantizar que la ventana activa sea la ventana prevista.

    La mejor solución siempre es optar por el enfoque API, como puede ver en el siguiente ejemplo. La API usa un objeto para identificar y apuntar a una ventana específica. Entonces, cuando usa objetos, puede estar seguro de que está interactuando con la ventana correcta, ya sea que esté activa o inactiva.

    Ejemplo 2: uso del objeto de aplicación de Adobe para Acrobat Pro

    Si tiene la versión con licencia de Acrobat Pro, debe usar el código a continuación. Primero creamos los objetos requeridos, abrimos el PDF, lo traemos y luego buscamos la cadena usando la función FindText

    Sub searchUsingAcrobatPro()
    
        Dim searchString As String
        Dim PDF_path As String
        Dim appObj As Object, AVDocObj As Object
    
        searchString = "PDF"
        PDF_path = "search.pdf"
    
        'Check if the file exists.
        If Dir(PDF_path) = "" Then
            MsgBox "File not found..."
            Exit Sub
        End If
    
        On Error Resume Next
    
        'Create Adobe Application object.
        Set appObj = CreateObject("AcroExch.App")
    
        'Check for any errors.
        If Err.Number & < & > 0 Then
            MsgBox "Error in creating the Adobe Application object..."
            Set appObj = Nothing
            Exit Sub
        End If
    
        'Create the AVDoc object.
        Set AVDocObj = CreateObject("AcroExch.AVDoc")
    
        'Check for any errors.
        If Err.Number & < & > 0 Then
            MsgBox "Error in creating the AVDoc object..."
            Set AVDocObj = Nothing
            Set appObj = Nothing
            Exit Sub
        End If
    
        On Error GoTo 0
    
        'Open the PDF file and check if the open was successful.
        If AVDocObj.Open(PDF_path, "") = True Then
    
            'Bring the PDF file to the front.
            AVDocObj.BringToFront
    
            'Search for the string and check if the the string was found.
            'If text is found, it will be highlighted (PDF is already in focus)
            If AVDocObj.findtext(searchString, False, False, False) = False Then
    
                'If text was not found, close the PDF file and perform clean-up
                AVDocObj.Close True
                appObj.Exit
    
                'Release the objects.
                Set AVDocObj = Nothing
                Set appObj = Nothing
    
                MsgBox "The string not found in the PDF file..."
    
            End If
    
        Else
            'PDF file failed to open
            appObj.Exit
    
            'Release the objects.
            Set AVDocObj = Nothing
            Set appObj = Nothing
    
            MsgBox "Could not open the PDF file..."
    
        End If
    
    End Sub
    
    

    El texto se resalta de nuevo como antes. Sin embargo, aquí no verá el cuadro de texto de búsqueda en la esquina superior derecha.

    Search2 Busque en un PDF una cadena de texto con VBA para Excel

    Ahora echemos un vistazo más de cerca a la función FindText. La sintaxis de la función se da a continuación.

    Buscar texto(szText como cadena, bCaseSensitive como largo, bWholeWordsOnly como largo, bReset como largo) Si es booleano

    szTexto: Texto a buscar

    b Sensible a mayúsculas y minúsculas: si la búsqueda debe distinguir entre mayúsculas y minúsculas (True distingue entre mayúsculas y minúsculas)

    b Solo palabras completas: Coincidir con la palabra completa o incluso parte de una palabra (Verdadero es coincidir con la palabra completa)

    bReiniciar: Un número positivo inicia la búsqueda desde la primera página del documento. Si 0, es
    comienza en la página actual.

    valor de beneficio: la función devuelve verdadero si se encuentra la cadena especificada. De lo contrario se devuelve falso

    La API de Adobe contiene muchas más funciones útiles que puede usar para interactuar con un archivo PDF usando Excel VBA. Un documento completo está disponible en el sitio de Abode

    Esta es una forma más eficiente y confiable de buscar un archivo PDF y se recomienda usarla.

    Lea más sobre el texto y las cadenas de Excel aquí:

    1. Procesamiento y manipulación de cadenas de Excel VBA
    2. Fórmulas y funciones de Excel, buscar texto dentro de otro texto, buscar ()
    Su Calificación Nos Ayuda a Mejorar
    Etiquetas: