Importar datos tabulares desde PDF con Power Query

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp

Contenidos

Nivel: intermedio

[Edit: April 2019]

Microsoft hizo el Conector PDF en Power BI generalmente disponible en abril de 2019. Esta es otra instancia para mostrar que Microsoft está escuchando a la comunidad para agregar o mejorar las características de Power BI. El conector de archivo PDF aparecerá en la categoría Archivo en el cuadro de diálogo Obtener datos como se muestra a continuación.

pdf-connector-1-450x354-5854266

Seleccione el conector PDF y especifique la ruta a su archivo PDF. Power Query extraerá tablas automáticamente y se las presentará en el cuadro de diálogo Navegador, donde puede obtener una vista previa y seleccionar una o varias tablas.

aca69e1f-3c75-4e4d-a5da-313f475dd78d-5210210

A continuación se muestra mi artículo original sobre la solución alternativa anterior al conector PDF en Power BI.

Importación de datos tabulares de un documento PDF a Excel (o Power BI) mediante Power Query

Hoy les comparto un proceso que desarrollé que les permite importar datos tabulares de un documento PDF a Excel (o Power BI) usando Power Query. No quería comprar software para hacer esta tarea, así que comencé a experimentar cómo podría hacerlo con las herramientas que ya tengo, y hoy comparto mi solución aquí.

pdf-to-pq-1943849

Nota: Esto solo funcionará para datos tabulares en un PDF; exactamente lo mismo que descargar desde una página web debe ser en forma tabular.

También demuestro algunos trucos de Power Query más adelante en esta publicación, así que asegúrese de leer hasta el final. Estos trucos no son difíciles y es posible que se sorprenda de lo que puede hacer.

Vista general del proceso

Estos son los pasos que utilizo para tomar la tabla del PDF.

  • Abra el PDF en Microsoft Word.
  • Guarde el archivo como una página web de un solo archivo.
  • Importe la página web de un solo archivo en Power Query como HTML.
  • Realice el proceso normal de limpieza y transformación que haría normalmente (además, por supuesto, de los trucos geniales que utilizo a continuación).

Trabajado a través del ejemplo

Hice una búsqueda rápida en Google para encontrar un PDF que contenga algo que pudiera usar en mi demostración desde la Web. Encontré este PDF que contiene una lista de estados de EE. UU. Con sus abreviaturas

http://www.siue.edu/postal/pdf/Abbreviation-List.pdf Tenga en cuenta que los datos que quiero de este archivo están en formato tabular.

image_thumb-9-1712108

Guardé el PDF en una ubicación conocida en mi PC.

Convierta el PDF en un archivo de página web

Abrí Microsoft Word y luego abrí el archivo PDF desde Word. Recibí este mensaje de advertencia a continuación. Acabo de hacer clic en «no mostrar este mensaje de nuevo» y hacer clic en Aceptar.

image_thumb-10-6037567

Luego seleccioné Archivo Guardar como y guardé el archivo como una página web de un solo archivo (que se muestra a continuación).

2016-11-18_121653-9336768

Importar a Power Query

Hay un par de formas en las que puede realizar el siguiente paso. Encontré que lo siguiente es el más fácil.

Cree una nueva consulta que se conecte a un archivo de texto (ejemplo que se muestra a continuación: Excel 2016, pero es similar en todas las demás versiones y Power BI)

image_thumb-12-6258870

En el cuadro de diálogo, cambie el filtro de archivos para que pueda encontrar todos los tipos de archivos (como se muestra a continuación), luego navegue hasta encontrar mi archivo.

image_thumb-13-5452344

Luego seleccione el archivo MHT creado anteriormente y haga clic en «importar»

image_thumb-14-9405854

Power Query no identificará correctamente el tipo de archivo, así que haga clic con el botón derecho en el archivo (que se muestra a continuación) y seleccione HTML.

image_thumb-15-1462410

Power Query ahora identifica correctamente la tabla en el documento. Expandí el identificado como «3DTableGrid».

image_thumb-16-5756016

En sus propios documentos PDF, es posible que deba usar un poco de prueba y error para encontrar la tabla correcta.

Luego hice clic en la Tabla que quería (mostrada como 2 arriba).

Limpiar los datos

Los datos comienzan a verse bien en esta etapa. Pero tenga en cuenta que hay un poco de «ruido» en el archivo (ver más abajo). Power Query es una gran herramienta para solucionarlo.

image_thumb-17-9704335

Primero me deshice de la primera fila (Eliminar filas superiores, 1).

Luego copié el texto haciendo clic derecho en una de las celdas que contienen este texto y seleccionando «copiar». Luego seleccioné las 4 columnas e hice una Transformación Reemplazar valores y reemplacé sin nada.

No necesitaba las 11 filas inferiores, así que quité filas Eliminar filas inferiores 11

image_thumb-18-2727947

Ahora, algunos trucos de Power Query

Power Query es un lenguaje de fórmulas. Si analiza cada uno de los pasos en la ventana Pasos aplicados, notará que cada paso es una fórmula, y la fórmula toma la salida de la fórmula anterior como paso de entrada a la siguiente fórmula. La interfaz de usuario asume que cada paso tomará el paso anterior como entrada para el nuevo paso, pero no tiene por qué ser así. Puede anular eso si lo desea, le muestro cómo a continuación.

Encienda la barra de fórmulas antes de continuar.

formula-5245823

En este punto, tengo mis datos en 4 columnas, pero realmente quiero todos los datos en solo 2 columnas.

image_thumb-19-3526899

Esto es fácil de solucionar con algunos trucos simples de Power Query, con muy poca codificación PQL.

Primero cambié el nombre de este paso para que se llamara All4Columns. Me gusta cambiar el nombre de los pasos importantes en mi ventana Pasos aplicados para que sea más fácil encontrar los que necesito más adelante.

image_thumb-30-4386224

Luego eliminé las últimas 2 columnas usando la interfaz de usuario. Seleccione las columnas para eliminar, haga clic con el botón derecho y luego elimine las columnas.

image_thumb-20-5001127

Antes de continuar, cambié el nombre de las 2 columnas para que se llamaran «Estado» y «Abreviatura», y renombré el paso para que se llamara First2Columns usando el mismo enfoque de cambio de nombre que antes.

image_thumb-31-8145224

Ahora el truco. En cualquier punto de su consulta, puede agregar un paso de consulta personalizado haciendo clic en el botón que se muestra en 1 a continuación.

image_thumb-32-1808455

Power Query asume que desea agregar un nuevo paso que comienza desde el paso anterior. Entonces, Power Query agrega automáticamente el paso anterior como punto de partida (como se muestra a continuación).

image_thumb-33-5559060

Pero no es necesario que siga el paso anterior. En este caso, quiero referirme al paso «All4Columns» en su lugar. Así que simplemente escribí el nombre del paso que quería (como se muestra a continuación) para reemplazar lo que Power Query agregó por mí.

= All4Columns

Ahora que recuperé las 4 columnas, realicé los siguientes pasos.

  • eliminó las primeras 2 columnas
  • cambió el nombre de las columnas a «Estado» y «Abreviatura» como antes
  • renombrado el paso para que se llame Second2Columns

Esto me dejó con 2 pasos no secuenciales (First2Columns, Second2Columns) que cada uno contenía la mitad de los datos.

Agregue las 2 tablas en una sola tabla

No sabía cómo escribir el código para hacer esto, así que volví a usar la interfaz de usuario. Seleccioné «Adjuntar consultas» y agregué la consulta a sí misma. Eso obligó a la interfaz de usuario a escribir el código por mí como se muestra a continuación.

image_thumb-34-6849317

La interfaz de usuario no solo escribió el código por mí, sino que aprendí una única función PQL que creo que probablemente pueda recordar. Table.Combine () y, por lo tanto, es posible que pueda hacer el mismo paso a mano la próxima vez (así es como tú también puedes aprender). Luego, todo lo que tenía que hacer era cambiar el código anterior para que en lugar de agregarse a sí mismo, agregara First2Columns a Second2Columns. No es necesario ser un científico espacial para descubrir cómo hacer esto :-). Se ve así después de que hice el cambio.

= Table.Combine ({First2Columns, Second2Columns})

Envolver

Espero que este artículo le haya resultado útil y que haya aprendido algunas cosas.

  1. Cómo importar datos de un PDF
  2. Cómo hacer referencia a filas no secuenciales en una consulta
  3. Cómo usar la interfaz de usuario en Power Query para ayudarlo a escribir consultas más avanzadas.
  4. Cómo consultar la barra de fórmulas para comenzar a desarrollar sus conocimientos sobre el lenguaje de fórmulas de Power Query.

Si está en Power Pivot y aún no lo ha hecho, puede descargar mi documento “Diez cosas que desearía saber cuando comencé con Power Pivot” desde el enlace a continuación.

Edición: 24 de noviembre de 2016
Un amigo mío Dave Marriott estaba usando mi enfoque anterior, pero tenía una pila de archivos PDF a los que necesitaba acceder. Decidió escribir un código Word VBA que automatiza la tarea de convertir los PDF a archivos MHT. Dave es un programador profesional de VBA con sede en Adelaide, Australia, si desea contratarlo para que lo ayude a ser más eficiente en su negocio. Puedes contactarlo en LinkedIn

Copie este código VBA en Microsoft Word. ¿Por qué no agregarlo en su plantilla normal para que siempre esté disponible? Si no ha hecho esto antes, puede seguir mis instrucciones sobre cómo hacerlo en Excel (es exactamente el mismo proceso en Word). Ejecute el código para iniciar un cuadro de diálogo. Puede realizar una selección múltiple de tantos PDF como desee y el código los convertirá todos por usted.

Sub ConvertToMHT()

Dim f_dialog As FileDialog
Dim FileChosen As Integer
Dim FileName As String
Dim i As Integer
Set f_dialog = Application.FileDialog(msoFileDialogFilePicker)
f_dialog.InitialView = msoFileDialogViewList
f_dialog.AllowMultiSelect = True

FileChosen = f_dialog.Show
If FileChosen = -1 Then
     For i = 1 To f_dialog.SelectedItems.Count
          Documents.Open FileName:=f_dialog.SelectedItems(i)
          ActiveDocument.SaveAs2 FileName:=Mid(f_dialog.SelectedItems(i), 1, Len(f_dialog.SelectedItems(i)) - 4) & ".mht", FileFormat:=wdFormatWebArchive
          ActiveWindow.Close
     Next i
End If

End Sub

Si desea una lección completa sobre cómo usar Power Query, consulte mi curso de capacitación aquí https://exceleratorbi.com.au/product/power-query-excel-power-bi-online-training/

!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window,document,’script’,
‘https://connect.facebook.net/en_US/fbevents.js’);
fbq(‘init’, ‘639916389503636’);
fbq(‘track’, ‘PageView’);

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.

error: Alert: Content is protected !!