Biblioteca Camelot (III)
Conversión de tablas a Excel
Para finalizar esta serie de entradas sobre Camelot, expongo en esta entrada la transcripción del script del autor de [ExcelMasPro] cuyo vídeo cité como fuente [en esta entrada]. Sirva de agradecimiento a su autor.
El objetivo de esta entrada es triple: reconocer lo que ExcelMasPro nos aporta con su trabajo, mostrar otro modo de trabajar con Python y retomar la referencia a la relación entre este lenguaje y las hojas de cálculo. Y todo en el mismo paquete.
Paso sin más a presentar el script que he escrito copiando literalmente el que se expone en el vídeo, aunque el que aquí presento omite la formulación de la función y la llamada a la misma. Esto no altera el propio funcionamiento del código, aunque lo simplifica adaptándolo al modo de trabajar que se ajusta a mi nivel actual de conocimiento:
import camelotimport osimport pandas as pdfrom tkinter import Tkfrom tkinter.filedialog import askopenfilename, askdirectoryfrom datetime import datetime#Ocultar ventana principal de TKinterTk().withdraw()#Seleccionamos el archivo pdfprint("Seleccione el archivo PDF:")pdf_file = askopenfilename(title = "Seleccionar el archivo PDF",filetypes=[("Archivos PDF","*.pdf")])if not pdf_file:print("No se seleccionó ningún archivo. Saliendo...")#Seleccionar la carpeta de destinoprint("Seleccione la carpeta donde desea guardar el archivo Excel:")output_folder = askdirectory(title="Seleccionar carpeta de destino")if not output_folder:print("No se seleccionó ninguna carpeta. Saliendo...")#Nombrar el archivo Excelnow = datetime.now().strftime("%m-%d-%y-%H-%M")output_excel = os.path.join(output_folder, f'Import_PDF_a_Excel_{now}.xlsx')#Extracción de las tablas del pdf mediante Camelotprint("Extrayendo tablas del PDF...")tables = camelot.read_pdf(pdf_file,pages="all", flavor="stream")#Guardar las tablas en Excelif not tables:print("No se encontraron tablas en el archivo PDF:")#Guardando las tablaswith pd.ExcelWriter(output_excel, engine="openpyxl") as write:for i, table in enumerate(tables):table.df.to_excel(write, sheet_name = f'Tabla_{i+1}', index=False)
En resumen, lo que hace este script es acceder a un archivo pdf, capturar las tablas que incluye (lo que Camelot identifica como tales, que no siempre lo son) y copiarlas en una hoja de cálculo en la que crea tantas hojas como tablas encuentra.
El uso de TKinter permite al script facilitar una entrada de datos personalizada y en formato gráfico; cosa que raramente he empleado yo por considerarlo innecesario en este nivel de aprendizaje, pero en este caso me ha parecido interesante mantenerlo por mostrar otras formas de trabajar con Python (más cercanas al desarrollo de aplicaciones o DocAp).
Me ha parecido especialmente interesante el modo de construir el nombre del documento Excel creado, aunque he realizado un pequeño cambio en el formato (uniendo todos los elementos mediante guion bajo).
Realmente este script es más que una forma de mostrar el uso de Camelot (o de TKinter), incluyendo el procedimiento de crear y guardar datos en una hoja de cálculo de Excel. Supone poner a nuestra disposición una pequeña aplicación que nos resuelve el problema de acceder a cualquier documento pdf y extraer las tablas que contenga dejándonoslas disponibles como documento Excel. No siempre funciona perfectamente (sobre todo cuando los documentos son complejos) y no siempre extrae todos los datos de las tablas (interesa comprobar la calidad del resultado), pero al menos para pdf sencillo y tablas "normales" el éxito está garantizado.







