Se ven chéveres tus indicaciones, quiero agilizar una tarea muy repetitiva en mi trabajo, donde tengo que copiar el ID del cliente, # de certificado, nombre del archivo y armar un correo con esa info... creo que si es posible teniendo un PDF de base.
Me parece muy util y Muy Completa tu Instruccion. En mi caso, no puedo pasar del minuto 9:21: me sale una ventana emergente en el Visual Basic (dice Macros) al tratar de ejecutar la verificacion del SHELL... ¿que podra ser ? . Mi saludo cordial.
Hola Carlos, primero que nada, gracias por tu comentario. En cuanto a tu consulta, para poder ayudarte mejor, necesitaría más detalles o una imagen del error y el código. Puedes escribirme por mail o alguna de mis redes sociales con esta info y con gusto te intentaré dar una mano. Saludos.
Buen día Ale, gracias por compartir, ya di like y estoy suscrito, como se pudiera hacer para que cuando encuentre el dato el resultado lo pueda colocar en otra celda y no en la misma?, de antemano muchas gracias
Primero que nada muchas gracias por el apoyo al canal, se valora y ayuda un montón! En cuanto a tu consulta, es muy sencillo, lo que deberías hacer es modificar el bloque dentro del If, luego de haber encontrado tu coincidencia y hacer que siempre lo ponga en la primera celda vacía, para eso, podemos modificar el código de la siguiente manera: 🔽 *Código* If InStr(...) > 0 Then 'Declaramos una variable donde vamos a guardar la fila objetivo Dim lastRow As Long If ThisWorkbook.Sheets(1).Cells(1,1).Value = "" Then lastRow = 1 Else lastRow = ThisWorkbook.Sheets(1).Cells(Rows.Count,1).End(xlUp).Offset(1,0).Row End If 'Colocamos el valor en la celda correspondiente ThisWorkbook.Sheets(1).Cells(lastRow, 1).Value = buffer End if Listo, con ese sencillo cambio se irán apilando cada una de las coincidencias en la columna A. Espero que te sirva! Saludos.
Buenas! Me daba el siguiente problema: error copying the text from this document is not allowed. Lo solucioné abriendo una pestaña de google chrome, arrastrando el documento a esta, presionando el botón de imprimir y dandole a 'Guardar como PDF' (NO GUARDAR DE MICROSOFT PRINT A PDF). Con eso usé el archivo pdf que me guardó y pude seguir el tutorial. Muchas gracias por compartir tu conocimiento, Ale.
Hola, ¿cómo están? Si ejecutan la ayuda o "help" del ejecutable que descargamos, ahí salen todos los comandos posibles que permite el mismo. Simplemente, ejecuten: *pdftotext.exe -h* y les dará todo el listado, incluyendo el que muestro en el video. Saludos.
11 หลายเดือนก่อน
Hola, excelente tutorial, es de mucha ayuda gracias! Tengo una consulta, si la línea que quiero obtener es muy dinámica; es decir, los datos que aparecen allí variará por cada PDF, por lo que no habría forma de obtenerla, pero la línea anterior a esta sí es estática. Dicha línea estática sí puedo obtenerla dentro del if para capturarlo. Entonces, cómo puedo obtener la línea siguiente a esta detectada? ¿Hay algo similar a MoveNext como cuando trabajamos con alguna BBDD? Te agradezco mucho de antemano por tu ayuda y tu tiempo.
Hola, ¿cómo estás? Muchas gracias por tu comentario. En cuanto a tu duda, si es posible, y es exactamente como comentas. Vas a tener que usar el condicional para capturar la línea anterior y luego, moverte a la siguiente, que es la que realmente te interesa. Para esto, tendrás que cambiar un poco la lógica de apertura y lectura de tu archivo de texto para luego buscar en él. Te dejo lo que tendrás que hacer: 'Ruta del archivo rutaArchivo = ROOT & OUTPUT 'Crear una instancia de FileSystemObject Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") 'Verificar si el archivo existe If fso.FileExists(rutaArchivo) Then 'Abrir archivo -modo lectura- Set archivo = fso.OpenTextFile(rutaArchivo, ForReading) 'Leer contenido linea a linea Dim linea As String Do While Not archivo.AtEndOfStream linea = archivo.ReadLine If linea = "VALOR ESTATICO" Then linea = archivo.ReadLine Debug.Print "La linea siguiente es:", linea Exit Do End If Loop 'Cerramos archivo archivo.Close 'Mostrar el contenido leido Debug.Print "La linea objetivo es:", linea Else MsgBox "El archivo no existe!" End If Con eso debería ser suficiente para solucionar tu problema, Saludos!
hola muchas gracias, tenía varias dudas. cómo haces para que shell sepa que tiene que ejecutar el comando dentro de CMD? Para mi proyecto, el archivo pdftotxt.exe lo debo tener en otro directorio, pero solo me funcionaba si lo tenía dentro de la misma carpeta que el archivo pdf. Después de un buen rato logré solucionarlo así. En este código ruta_pdftotext, pdf y txt son las rutas completas incluyendo los nombres de los archivos. Los nombres de las carpetas que contenían estos archivos tenían espacios, por lo que cmd no reconocía las rutas. lo solucione agregando Chr(34), al comienzo y al final de los strings de cada ruta con su respectivo & ...... Shell "cmd.exe" 'Esperar a que la ventana de Símbolo del sistema se abra completamente' Application.Wait Now + TimeValue("0:00:01") 'Crear archivo de texto SendKeys ruta_pdftotext & " -table" & " " & pdf & " " & txt & "{ENTER}", True Application.Wait Now + TimeValue("0:00:03")
' Cierra la ventana de la línea de comandos AppActivate "cmd.exe" SendKeys "%{F4}" ...... no dejé nada fuera del Sub() De programación sé lo básico pero utilizando ensayo y error más la ayuda de Chat GPT se puede hacer bastante. Saludos del otro lado de la cordillera un abrazo.
Hola Francisco, cómo estás? En cuanto a tu primera duda sobre la Shell y como hace para saber que debe ejecutarlo sobre CMD, la realidad es que no es así. Si observamos la documentación de esta función (bit.ly/3A8HAV9) lo que hace es recibir un ejecutable (*.exe) por parámetro (como el que le estamos pasando nosotros) y ejecutarlo, sobre donde lo va a ejecutar lo maneja la misma función, no es necesario que vos le indiques _"cmd.exe your_executable_path.exe"_ directamente con enviarle la ruta completa a Shell sabrá como ejecutarla. Sobre cuando el directorio contiene espacios, si, es correcto lo que hiciste de agregar las comillas dobles mediante el Chr. Por ejemplo, esto sería correcto: Dim path As String: path = Chr(34) & "C:\My folder\pdftotext.exe" & Chr(34) & " -table mypdf.pdf output.txt" Recordá que si el pdf o el archivo de salida están ubicados en un directorio con espacios, deberías seguir la misma lógica para que funcione. Me alegro de que te haya funcionado y cualquier consulta, no dudes en preguntar, Saludos.
Hola, ¿cómo estás? Puedes modificar el código para poder hacer lo que necesites. Si no te ha salido, decime bien que es lo que querés hacer a ver si te puedo dar una mano. Saludos!
Muy buen video, gracias por la explicación, tengo una duda como lo puesdo extraer de un bloc de notas donde la informacion esta tabulada pero la informacion tambien contiene encabezados que no quiero extraer ademas que cada dato de la tabulacion de txt se pasa a excel columna por columna que son los campos de las tabulaciones en bloc de notas, ya que aqui en el video veo quetodo se guarda en una sola celda, gracias
Hola Alejandro, cómo estás? Me podrías explicar un poco mejor que es lo que quieres hacer para poder darte una mano? Porque no termine de entender si tiene que ver o no con algo de lo explicado en el video o es otra cosa. Saludos.
Hola Fran, paso a contestar tus inquietudes: 1- Probablemente, pero depende mucho de como este ese texto en el plano, si forma parte de una imagen (por lo tanto, es imagen, no texto) o si está como texto literal en el PDF. Si es esta última, la respuesta es sí. Será cuestión de probar. 2- No, esta herramienta solo está disponible en binario (.exe) Saludos.
Hola, muchas gracias por tu comentario. En cuanto a tu duda, sí, existe, de hecho estoy preparando un video sobre ese tema, así que próximamente lo estaré publicando por el canal. Saludos.
Hola, para abrirla depende de lo que tengas instalado en tu Windows. Pero puedes abrirla abriendo el programa "Terminal" y si no tienes este, que es la versión más actual, puedes buscar "cmd" y abrir una línea de comandos. También, puede abrir este último más rápidamente presionando tecla Windows + R y en el diálogo que te aparece (ejecutar) escribir *cmd* y presionas Enter. Saludos.
@@mcastellal tienes que crear una macro pública, luego el botón, por ejemplo, desde Insertar > Forma y se lo asignas al mismo mediante clic derecho, asignar macro y seleccionando del listado tu macro a ejecutar. Saludos.
Hola Ulises, sí, efectivamente se puede utilizar para los PDF con tablas. Pero va a depender de en que plataforma necesites los datos y demás. Saludos.
Hola, muchas gracias por tu comentario! En cuanto a tu duda, no hay problema, no tenes que saber la cantidad de filas. Simplemente podes poner una condición de entrada y otra de salida, por ejemplo si sabes cómo empieza la tabla podes buscar que la línea contenta eso y ahí comenzar a imprimir la información y que termine cuando la fila contenga un texto que sepas que ya no debería incluirse. Para esto, vas a tener que cambiar un poco la lógica que está dentro del bucle *Do Until* del vídeo. Saludos.
Hola, ¿cómo estás? Sí, no hay problema. Lo que tendrías que hacer es abstraer el código para que sea "genérico" y colocarlo dentro de un bucle. Este bucle debería recorrer todos los PDFs que necesites e ir extrayendo el texto requerido de cada uno de ellos. Saludos.
Hola, quisiera saber cómo transformar el archivo txt en excel, o sea, que los datos queden de una visibilidad como en el PDF pero en excel, separando cuadrículas, claro. Se podrá? Aue debo hacer? Me ayudarías con el código? :(
Podrías intentar pegar el contenido del txt en el Excel y luego, si está separado por tabulaciones, arreglar el formato utilizando la opción *Datos a columnas* con el separador de tabulador. Es difícil poder decirte una solución correcta a tu problema sin tener el archivo PDF de inicio, pero seguro que podrás hacerlo. Saludos!
Hola! excelente tutorial. Yo no soy programador experto, mas bien básico. Descargué todo como indicas (en Mac), incluido pdftotext para Mac. Puse las rutas correctas en la macro y el output. Pero cuando voy a ejecutar, se abre un cuadro de dialogo en visual basic que me pide el nombre de la macro a ejecutar, y es como si no hubiese codigo en el modulo, pero en realidad si está la sub xxxxxxx. Sabes que puede ser?
Hola, como estás? Sí, eso es porque estás ejecutando sin estar parado en ningún procedimiento. Cuando te salga el cuadro de diálogo deberías seleccionar la macro que creaste. O simplemente pararte en cualquier parte de tu código que quieras ejecutar y ahí presionar F5 o ejecutar. Saludos.
@@alefranzoni gracias por la respuesta. Para ponerte en contexto, no soy nuevo en macros, aunque lejos de ser experto como tu. Siempre abro VB y me paro en el procedimiento, tanto para ejecutar paso a paso como para que corra entera. Pero es raro, como si la macro no existiera, aunque la tengo abierta. Cuando le doy ejecutar, se abre incluso el cuadro de diálogo pero vacío, no muestra ninguna macro. Será que estoy en Mac? Nunca se han llevado bien estos 2.
@@sendumulticourier113 puede que sea por la Mac ya que no soporta al 100% las macros o también puede ser que sea porque tu función/procedimiento está esperando un argumento, por la tanto no la podes ejecutar así. Si este último es el caso (que es muy posible) intenta ejecutar el método desde la ventana de inmediato. Eso sí, asegúrate que esté público para poder llamarlo desde ahí.
Es tal cual lo muestro en el video, tenés que entrar a la web y presionar "download" en la versión que necesites. Te dejo el link a hoy día para Windows: dl.xpdfreader.com/xpdf-tools-win-4.05.zip
Hola Carlos, si puedes hacer eso sin ningún problema. Solo tienes que evaluar el contenido de cada línea (lo he explicado en algún comentario de este video) y cuando encuentres el valor que estás buscando, hacer lo que necesites. ¡Saludos!
Hola Hugo, ¿cómo estás? Eso es porque las rutas o alguna de ellas es incorrecta. Te recomiendo que depures el código y en la línea que debería abrir el ejecutable y el pdf correspondiente pongas un breakpoint para asegurar y verificar que las rutas sean correctas. Saludos.
Hola , al momento de imprimirlo me arroja solo un - . lo que yo hago es copiarlo como tú lo pego abajo del extract y le doy enter y solo me devuelve un -, pero no me sale el signo de pregunta inverso que a ti si.
f me sale error 53 y no entiendo why lmao Option Explicit Const ROOT As String = "C:\Users\eb\Desktop\MAGIC" Const bin As String = "pdftotext.exe" Const output As String = "output.txt" Sub extracttextfromPDF(ByVal pdf As String, Optional convertmode As String = "layout") Dim buffer As String, file As Integer 'convertir el pdf a texto Shell ROOT & bin & " -" & convertmode & " " & ROOT & pdf & " " & ROOT & output, vbHide 'leemos archivo de texto file = FreeFile Open ROOT & output For Input As file Do Until EOF(file) Line Input #file, buffer Debug.Print buffer Loop Close file End Sub
@@xlalo264 Buenas Eduardo, cómo estás? Te está fallando porque en el ROOT te falta una barra más para que el path sea armado correctamente. Tu tienes: Const ROOT As String = "C:\Users\eb\Desktop\MAGIC" Deberia ser: Const ROOT As String = "C:\Users\eb\Desktop\MAGIC\" Prueba con ese cambio y me dices, Saludos.
@@alefranzoni Hola ale, gracias por tu comentario, pero me sigue fallando creo que me arrojaba algun error. y ya lo deje por la paz hice ese cambio como indicas.
Acabo de descargarlo nuevamente para verificar y si tiene la macro. Descargalo nuevamente y fijate de desbloquear el archivo de ser necesario (clic derecho, propiedades y hay un checkbox para desbloquearlo) y por supuesto, habilitar las macros al abrirlo. Saludos.
Hola, me gustaría extraer datos pero de un txt encontrando el dato que va después de una palabra clave, (ejemplo: Número de nomina “salto de línea “ 12483) Palabra clave: Número de nómina Dato: 12483 Tendrás algún video explicando extraer datos de un txt? Gracias por tus excelentes videos máster 🙌
Hola, ¿cómo estás? Para resolver lo que me comentas, con lo que se muestra en el video en la parte donde leemos el archivo de texto (output.txt) podrías hacerlo, no tengo un video específico sobre ese tema. De todas maneras, te dejo a continuación el método completo que deberías utilizar para leer un archivo de texto y buscar por ese string. Sub leerArchivo() 'Importar Referencia: Microsoft Scripting Runtime Dim fso As FileSystemObject Dim archivo As TextStream Dim rutaArchivo As String, contenido As String 'Ruta del archivo de texto que queremos leer rutaArchivo = "C:\tu_archivo.txt" 'Crear una instancia de FileSystemObject Set fso = New FileSystemObject 'Verificar si el archivo existe If fso.FileExists(rutaArchivo) Then 'Abrir en modo lectura Set archivo = fso.OpenTextFile(rutaArchivo, ForReading) 'Leer contenido linea a linea Dim linea As String Do While Not archivo.AtEndOfStream linea = archivo.ReadLine If linea = "Número de nómina" Then ' Imprimimos el valor de la nómina que sabemos que esta en la linea siguiente Debug.Print archivo.ReadLine 'Salimos del bucle si no queremos hacer más nada o no hay más lineas con nominas que buscar Exit Do End If Loop 'Cerramos archivo archivo.Close Else 'Archivo no existe MsgBox "El archivo no existe.", vbExclamation End If set archivo = nothing set fso = nothing End Sub Saludos.
Hola Glen, gracias por comentar, los comentarios ayudan a que TH-cam lo muestre un poco más al video, más teniendo en cuenta que es un canal muy chico. De todas maneras, con que le pueda llegar a alguien, como ustedes, ya me deja contento. Espero poder volver a subir más videos pronto para levantar un poco también el canal. Te mando un saludo!
Acabo de ver este video y la verdad necesito de sus ayudas si alguien amablemente me quiere ayudar. Necesito copiar una línea de un archivo PDF y que me lo copié en una celda de excel, apenas para empezar pq lo que necesito es un proceso más completo, se trata de recorrer una carpeta con mas 100 archivos en PDF y me copie de cada archivo una línea específica y me los vaya copiando en cada celda de excel. Por favor alguien que me quiera ayudar y me escriba.
Vas a tener que hacer un bucle y repetir el proceso que se muestra en el video para cada uno de los PDF que tengas en tu carpeta. Luego deberás analizar las líneas en busca de lo que querés y colocarlo donde desees en tu hoja de Excel (también se puede ver en el video como hacer esto). Saludos.
Se ven chéveres tus indicaciones, quiero agilizar una tarea muy repetitiva en mi trabajo, donde tengo que copiar el ID del cliente, # de certificado, nombre del archivo y armar un correo con esa info... creo que si es posible teniendo un PDF de base.
Hola Ale muchas gracias por este video! mas que esperado.
like y subscrito, me paso por tu cafecito
y a la espera de mas videos. Gracias totales!
Diego, muchas gracias por tu apoyo y me alegro de que te haya servido. Pronto se viene mucho más contenido! Saludos.
Excelente video!
Gracias por tu tiempo , muy útil tu aportación
Me alegro que te haya sido útil y gracias por tu comentario.
Me parece muy util y Muy Completa tu Instruccion. En mi caso, no puedo pasar del minuto 9:21: me sale una ventana emergente en el Visual Basic (dice Macros) al tratar de ejecutar la verificacion del SHELL... ¿que podra ser ? . Mi saludo cordial.
Hola Carlos, primero que nada, gracias por tu comentario. En cuanto a tu consulta, para poder ayudarte mejor, necesitaría más detalles o una imagen del error y el código. Puedes escribirme por mail o alguna de mis redes sociales con esta info y con gusto te intentaré dar una mano. Saludos.
Buen día Ale, gracias por compartir, ya di like y estoy suscrito, como se pudiera hacer para que cuando encuentre el dato el resultado lo pueda colocar en otra celda y no en la misma?, de antemano muchas gracias
Primero que nada muchas gracias por el apoyo al canal, se valora y ayuda un montón! En cuanto a tu consulta, es muy sencillo, lo que deberías hacer es modificar el bloque dentro del If, luego de haber encontrado tu coincidencia y hacer que siempre lo ponga en la primera celda vacía, para eso, podemos modificar el código de la siguiente manera:
🔽 *Código*
If InStr(...) > 0 Then
'Declaramos una variable donde vamos a guardar la fila objetivo
Dim lastRow As Long
If ThisWorkbook.Sheets(1).Cells(1,1).Value = "" Then
lastRow = 1
Else
lastRow = ThisWorkbook.Sheets(1).Cells(Rows.Count,1).End(xlUp).Offset(1,0).Row
End If
'Colocamos el valor en la celda correspondiente
ThisWorkbook.Sheets(1).Cells(lastRow, 1).Value = buffer
End if
Listo, con ese sencillo cambio se irán apilando cada una de las coincidencias en la columna A. Espero que te sirva!
Saludos.
Buenas! Me daba el siguiente problema: error copying the text from this document is not allowed.
Lo solucioné abriendo una pestaña de google chrome, arrastrando el documento a esta, presionando el botón de imprimir y dandole a 'Guardar como PDF' (NO GUARDAR DE MICROSOFT PRINT A PDF). Con eso usé el archivo pdf que me guardó y pude seguir el tutorial.
Muchas gracias por compartir tu conocimiento, Ale.
Gracias a vos por tu comentario y por compartir como solucionaste este problema, siempre viene bien por si a alguien más le sucede lo mismo 🙌🏻.
Hola, me puedes explicar de ¿ dónde sacaste la línea de comando?
😮 Yo tenía la misma curiosidad
Hola, ¿cómo están? Si ejecutan la ayuda o "help" del ejecutable que descargamos, ahí salen todos los comandos posibles que permite el mismo.
Simplemente, ejecuten: *pdftotext.exe -h* y les dará todo el listado, incluyendo el que muestro en el video.
Saludos.
Hola, excelente tutorial, es de mucha ayuda gracias!
Tengo una consulta, si la línea que quiero obtener es muy dinámica; es decir, los datos que aparecen allí variará por cada PDF, por lo que no habría forma de obtenerla, pero la línea anterior a esta sí es estática.
Dicha línea estática sí puedo obtenerla dentro del if para capturarlo. Entonces, cómo puedo obtener la línea siguiente a esta detectada? ¿Hay algo similar a MoveNext como cuando trabajamos con alguna BBDD?
Te agradezco mucho de antemano por tu ayuda y tu tiempo.
Hola, ¿cómo estás? Muchas gracias por tu comentario. En cuanto a tu duda, si es posible, y es exactamente como comentas. Vas a tener que usar el condicional para capturar la línea anterior y luego, moverte a la siguiente, que es la que realmente te interesa. Para esto, tendrás que cambiar un poco la lógica de apertura y lectura de tu archivo de texto para luego buscar en él. Te dejo lo que tendrás que hacer:
'Ruta del archivo
rutaArchivo = ROOT & OUTPUT
'Crear una instancia de FileSystemObject
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
'Verificar si el archivo existe
If fso.FileExists(rutaArchivo) Then
'Abrir archivo -modo lectura-
Set archivo = fso.OpenTextFile(rutaArchivo, ForReading)
'Leer contenido linea a linea
Dim linea As String
Do While Not archivo.AtEndOfStream
linea = archivo.ReadLine
If linea = "VALOR ESTATICO" Then
linea = archivo.ReadLine
Debug.Print "La linea siguiente es:", linea
Exit Do
End If
Loop
'Cerramos archivo
archivo.Close
'Mostrar el contenido leido
Debug.Print "La linea objetivo es:", linea
Else
MsgBox "El archivo no existe!"
End If
Con eso debería ser suficiente para solucionar tu problema,
Saludos!
explica en un videos por favor@@alefranzoni
hola muchas gracias, tenía varias dudas.
cómo haces para que shell sepa que tiene que ejecutar el comando dentro de CMD?
Para mi proyecto, el archivo pdftotxt.exe lo debo tener en otro directorio, pero solo me funcionaba si lo tenía dentro de la misma carpeta que el archivo pdf.
Después de un buen rato logré solucionarlo así.
En este código ruta_pdftotext, pdf y txt son las rutas completas incluyendo los nombres de los archivos.
Los nombres de las carpetas que contenían estos archivos tenían espacios, por lo que cmd no reconocía las rutas.
lo solucione agregando Chr(34), al comienzo y al final de los strings de cada ruta con su respectivo &
......
Shell "cmd.exe"
'Esperar a que la ventana de Símbolo del sistema se abra completamente'
Application.Wait Now + TimeValue("0:00:01")
'Crear archivo de texto
SendKeys ruta_pdftotext & " -table" & " " & pdf & " " & txt & "{ENTER}", True
Application.Wait Now + TimeValue("0:00:03")
' Cierra la ventana de la línea de comandos
AppActivate "cmd.exe"
SendKeys "%{F4}"
......
no dejé nada fuera del Sub()
De programación sé lo básico pero utilizando ensayo y error más la ayuda de Chat GPT se puede hacer bastante. Saludos del otro lado de la cordillera un abrazo.
Hola Francisco, cómo estás? En cuanto a tu primera duda sobre la Shell y como hace para saber que debe ejecutarlo sobre CMD, la realidad es que no es así. Si observamos la documentación de esta función (bit.ly/3A8HAV9) lo que hace es recibir un ejecutable (*.exe) por parámetro (como el que le estamos pasando nosotros) y ejecutarlo, sobre donde lo va a ejecutar lo maneja la misma función, no es necesario que vos le indiques _"cmd.exe your_executable_path.exe"_ directamente con enviarle la ruta completa a Shell sabrá como ejecutarla.
Sobre cuando el directorio contiene espacios, si, es correcto lo que hiciste de agregar las comillas dobles mediante el Chr. Por ejemplo, esto sería correcto:
Dim path As String: path = Chr(34) & "C:\My folder\pdftotext.exe" & Chr(34) & " -table mypdf.pdf output.txt"
Recordá que si el pdf o el archivo de salida están ubicados en un directorio con espacios, deberías seguir la misma lógica para que funcione.
Me alegro de que te haya funcionado y cualquier consulta, no dudes en preguntar,
Saludos.
Genio!! muy agradecido por tu video, pero necesito que me de varias lineas hasta que encuentre otro criterio de busqueda
Hola, ¿cómo estás? Puedes modificar el código para poder hacer lo que necesites. Si no te ha salido, decime bien que es lo que querés hacer a ver si te puedo dar una mano. Saludos!
Muy buen video, gracias por la explicación, tengo una duda como lo puesdo extraer de un bloc de notas donde la informacion esta tabulada pero la informacion tambien contiene encabezados que no quiero extraer ademas que cada dato de la tabulacion de txt se pasa a excel columna por columna que son los campos de las tabulaciones en bloc de notas, ya que aqui en el video veo quetodo se guarda en una sola celda, gracias
Hola Alejandro, cómo estás? Me podrías explicar un poco mejor que es lo que quieres hacer para poder darte una mano? Porque no termine de entender si tiene que ver o no con algo de lo explicado en el video o es otra cosa. Saludos.
Buenas tardes.
¿Se podría en VBA buscar texto en un documento PDF obtenido del escaneo de un diploma de un curso o de un título académico?
Saludos,
Buenas tardes, sí, en teoría, no debería haber ningún tipo de problema. Tendrías que probarlo, pero a priori te diría que sí. Saludos!
Una duda, Veo que cuando se copia la fila todo lo pone en una sola columna, ¿hay manera en que se pueda separar?
Hola, valdria para sacar texto de un plano en pdf? Y la otra pregunta es, no hay alguna forma de descargarlo como un dll?
Hola Fran, paso a contestar tus inquietudes:
1- Probablemente, pero depende mucho de como este ese texto en el plano, si forma parte de una imagen (por lo tanto, es imagen, no texto) o si está como texto literal en el PDF. Si es esta última, la respuesta es sí. Será cuestión de probar.
2- No, esta herramienta solo está disponible en binario (.exe)
Saludos.
Hola excelente video gracias!! Existe algo parecido para extraer imagenes desde un .PDF? Gracias
Hola, muchas gracias por tu comentario. En cuanto a tu duda, sí, existe, de hecho estoy preparando un video sobre ese tema, así que próximamente lo estaré publicando por el canal. Saludos.
Hola.
Por favor, ¿Como se abre esa ventana que le dices línea de comando?
Hola, para abrirla depende de lo que tengas instalado en tu Windows. Pero puedes abrirla abriendo el programa "Terminal" y si no tienes este, que es la versión más actual, puedes buscar "cmd" y abrir una línea de comandos. También, puede abrir este último más rápidamente presionando tecla Windows + R y en el diálogo que te aparece (ejecutar) escribir *cmd* y presionas Enter. Saludos.
@@alefranzoni Gracias! otra pregunta, por favor. ¿como lo ejecuto desde un boton?
@@mcastellal tienes que crear una macro pública, luego el botón, por ejemplo, desde Insertar > Forma y se lo asignas al mismo mediante clic derecho, asignar macro y seleccionando del listado tu macro a ejecutar.
Saludos.
Hola, excelente vídeo, pero no será mas fácil utilizar power bi para las tablas
Hola Ulises, sí, efectivamente se puede utilizar para los PDF con tablas. Pero va a depender de en que plataforma necesites los datos y demás. Saludos.
@@alefranzoni se puede utilizar en cualquier plataforma amigo. Saludos...
buenas tardes, esta genial el video, pero si necesito extraer solo la primera tabla sin saber la cantidad de filas?
Hola, muchas gracias por tu comentario! En cuanto a tu duda, no hay problema, no tenes que saber la cantidad de filas. Simplemente podes poner una condición de entrada y otra de salida, por ejemplo si sabes cómo empieza la tabla podes buscar que la línea contenta eso y ahí comenzar a imprimir la información y que termine cuando la fila contenga un texto que sepas que ya no debería incluirse.
Para esto, vas a tener que cambiar un poco la lógica que está dentro del bucle *Do Until* del vídeo.
Saludos.
Hola, podría hacer que leyera muchos pdfs y extrajera el texto de forma masiva de estos?
Hola, ¿cómo estás? Sí, no hay problema. Lo que tendrías que hacer es abstraer el código para que sea "genérico" y colocarlo dentro de un bucle. Este bucle debería recorrer todos los PDFs que necesites e ir extrayendo el texto requerido de cada uno de ellos.
Saludos.
Hola, quisiera saber cómo transformar el archivo txt en excel, o sea, que los datos queden de una visibilidad como en el PDF pero en excel, separando cuadrículas, claro. Se podrá? Aue debo hacer? Me ayudarías con el código? :(
Podrías intentar pegar el contenido del txt en el Excel y luego, si está separado por tabulaciones, arreglar el formato utilizando la opción *Datos a columnas* con el separador de tabulador. Es difícil poder decirte una solución correcta a tu problema sin tener el archivo PDF de inicio, pero seguro que podrás hacerlo. Saludos!
Hola! excelente tutorial. Yo no soy programador experto, mas bien básico.
Descargué todo como indicas (en Mac), incluido pdftotext para Mac.
Puse las rutas correctas en la macro y el output.
Pero cuando voy a ejecutar, se abre un cuadro de dialogo en visual basic que me pide el nombre de la macro a ejecutar, y es como si no hubiese codigo en el modulo, pero en realidad si está la sub xxxxxxx.
Sabes que puede ser?
Hola, como estás? Sí, eso es porque estás ejecutando sin estar parado en ningún procedimiento. Cuando te salga el cuadro de diálogo deberías seleccionar la macro que creaste. O simplemente pararte en cualquier parte de tu código que quieras ejecutar y ahí presionar F5 o ejecutar. Saludos.
@@alefranzoni gracias por la respuesta. Para ponerte en contexto, no soy nuevo en macros, aunque lejos de ser experto como tu. Siempre abro VB y me paro en el procedimiento, tanto para ejecutar paso a paso como para que corra entera. Pero es raro, como si la macro no existiera, aunque la tengo abierta. Cuando le doy ejecutar, se abre incluso el cuadro de diálogo pero vacío, no muestra ninguna macro. Será que estoy en Mac? Nunca se han llevado bien estos 2.
@@sendumulticourier113 puede que sea por la Mac ya que no soporta al 100% las macros o también puede ser que sea porque tu función/procedimiento está esperando un argumento, por la tanto no la podes ejecutar así. Si este último es el caso (que es muy posible) intenta ejecutar el método desde la ventana de inmediato. Eso sí, asegúrate que esté público para poder llamarlo desde ahí.
Me pasa lo mismo y uso windows, la macro no aparece para ejecutarla, es como si no existiera.
Como descargo el archivo, solo me muestra el link y no encuentro donde darle descargar al archivo.
Es tal cual lo muestro en el video, tenés que entrar a la web y presionar "download" en la versión que necesites. Te dejo el link a hoy día para Windows: dl.xpdfreader.com/xpdf-tools-win-4.05.zip
👏👏👏
Tu codigo me ayudara mucho, pero duda puedo hacer con el codigo que me busque un dato especifico para que no inserte todo el contenido
Hola Carlos, si puedes hacer eso sin ningún problema. Solo tienes que evaluar el contenido de cada línea (lo he explicado en algún comentario de este video) y cuando encuentres el valor que estás buscando, hacer lo que necesites. ¡Saludos!
Hola buen video, sabes no me abre el pdftotext, habra alguna solucion?
Gracias. Recuerda que el pdftotext no "abre" porque es un programa de cmd. Si te da algún error, dejámelo por acá que lo vemos. Saludos.
Estimado una duda, no me genera el archivo .txt y me dice archivo no encontrado error 53
Hola Hugo, ¿cómo estás? Eso es porque las rutas o alguna de ellas es incorrecta. Te recomiendo que depures el código y en la línea que debería abrir el ejecutable y el pdf correspondiente pongas un breakpoint para asegurar y verificar que las rutas sean correctas.
Saludos.
Hola, disuclpa, yo soy nuevo en esto, no he podido ejecturar nada desde el minuto 3:22.
Hola Elías, cómo estás? Me podrías indicar cuál es el error que estás teniendo específicamente? para poder ayudarte u orientarte mejor. Saludos.
Hola , al momento de imprimirlo me arroja solo un - . lo que yo hago es copiarlo como tú lo pego abajo del extract y le doy enter y solo me devuelve un -, pero no me sale el signo de pregunta inverso que a ti si.
f me sale error 53 y no entiendo why lmao
Option Explicit
Const ROOT As String = "C:\Users\eb\Desktop\MAGIC"
Const bin As String = "pdftotext.exe"
Const output As String = "output.txt"
Sub extracttextfromPDF(ByVal pdf As String, Optional convertmode As String = "layout")
Dim buffer As String, file As Integer
'convertir el pdf a texto
Shell ROOT & bin & " -" & convertmode & " " & ROOT & pdf & " " & ROOT & output, vbHide
'leemos archivo de texto
file = FreeFile
Open ROOT & output For Input As file
Do Until EOF(file)
Line Input #file, buffer
Debug.Print buffer
Loop
Close file
End Sub
@@xlalo264 Buenas Eduardo, cómo estás? Te está fallando porque en el ROOT te falta una barra más para que el path sea armado correctamente.
Tu tienes:
Const ROOT As String = "C:\Users\eb\Desktop\MAGIC"
Deberia ser:
Const ROOT As String = "C:\Users\eb\Desktop\MAGIC\"
Prueba con ese cambio y me dices,
Saludos.
@@alefranzoni Hola ale, gracias por tu comentario, pero me sigue fallando creo que me arrojaba algun error. y ya lo deje por la paz hice ese cambio como indicas.
el archivo de tipo ".xlsm" no contiene la macro al descargarlo
Acabo de descargarlo nuevamente para verificar y si tiene la macro. Descargalo nuevamente y fijate de desbloquear el archivo de ser necesario (clic derecho, propiedades y hay un checkbox para desbloquearlo) y por supuesto, habilitar las macros al abrirlo. Saludos.
Amigo, me compila perfecto pero no me lanza el documento, no sabrás por qué? lo revisé mil veces, llegué al minuto 9
bueno nada, lo ejecuté luego de sacarle el punto rojo siguió, ahora me jode con otra cosajajajaj, pero buena solución, aprendí mucho con este video!
@@chexloxd Hola, me alegro mucho y gracias por tu comentario! Saludos.
hola amigo no lo puedo hacer quien me ayuda por favor
Hola Hector, qué problema estás teniendo? Nos podrías dar más detalles para poderte ayudar? Gracias.
Hola, me gustaría extraer datos pero de un txt encontrando el dato que va después de una palabra clave, (ejemplo: Número de nomina “salto de línea “ 12483)
Palabra clave: Número de nómina
Dato: 12483
Tendrás algún video explicando extraer datos de un txt? Gracias por tus excelentes videos máster 🙌
Hola, ¿cómo estás? Para resolver lo que me comentas, con lo que se muestra en el video en la parte donde leemos el archivo de texto (output.txt) podrías hacerlo, no tengo un video específico sobre ese tema. De todas maneras, te dejo a continuación el método completo que deberías utilizar para leer un archivo de texto y buscar por ese string.
Sub leerArchivo()
'Importar Referencia: Microsoft Scripting Runtime
Dim fso As FileSystemObject
Dim archivo As TextStream
Dim rutaArchivo As String, contenido As String
'Ruta del archivo de texto que queremos leer
rutaArchivo = "C:\tu_archivo.txt"
'Crear una instancia de FileSystemObject
Set fso = New FileSystemObject
'Verificar si el archivo existe
If fso.FileExists(rutaArchivo) Then
'Abrir en modo lectura
Set archivo = fso.OpenTextFile(rutaArchivo, ForReading)
'Leer contenido linea a linea
Dim linea As String
Do While Not archivo.AtEndOfStream
linea = archivo.ReadLine
If linea = "Número de nómina" Then
' Imprimimos el valor de la nómina que sabemos que esta en la linea siguiente
Debug.Print archivo.ReadLine
'Salimos del bucle si no queremos hacer más nada o no hay más lineas con nominas que buscar
Exit Do
End If
Loop
'Cerramos archivo
archivo.Close
Else
'Archivo no existe
MsgBox "El archivo no existe.", vbExclamation
End If
set archivo = nothing
set fso = nothing
End Sub
Saludos.
Pero la palabra las tienes relacionadas en excel.
Casi no se mira el video 😢
Hola Glen, gracias por comentar, los comentarios ayudan a que TH-cam lo muestre un poco más al video, más teniendo en cuenta que es un canal muy chico. De todas maneras, con que le pueda llegar a alguien, como ustedes, ya me deja contento. Espero poder volver a subir más videos pronto para levantar un poco también el canal. Te mando un saludo!
Acabo de ver este video y la verdad necesito de sus ayudas si alguien amablemente me quiere ayudar. Necesito copiar una línea de un archivo PDF y que me lo copié en una celda de excel, apenas para empezar pq lo que necesito es un proceso más completo, se trata de recorrer una carpeta con mas 100 archivos en PDF y me copie de cada archivo una línea específica y me los vaya copiando en cada celda de excel. Por favor alguien que me quiera ayudar y me escriba.
Vas a tener que hacer un bucle y repetir el proceso que se muestra en el video para cada uno de los PDF que tengas en tu carpeta. Luego deberás analizar las líneas en busca de lo que querés y colocarlo donde desees en tu hoja de Excel (también se puede ver en el video como hacer esto). Saludos.