Hola,
Tengo una carpeta que contiene más de 100 archivos PDF, todos en un formato coherente. El nombre de archivo de cada PDF representa un número de lote que quiero utilizar y en cada PDF hay una tabla particular de datos que quiero extraer.
Mi objetivo es extraer la misma tabla de datos para cada PDF y luego concatenar todas las tablas de datos extraídas, etiquetadas por nombre de archivo PDF (número de lote). Finalmente, quiero dividir las columnas en la tabla concatenada y agruparlas por nombre de archivo PDF para terminar con una tabla final.
Intenté hacer esto manualmente y puedo llegar a la mesa final que necesito, sin embargo, lleva mucho tiempo ya que tengo que abrir y seleccionar la tabla en cada PDF por separado.
Por lo tanto, me pregunto si hay algún JSL que pueda ayudar con esto.
Soy muy nuevo en las secuencias de comandos, pero he podido crear una secuencia de comandos que me brinda exactamente lo que necesito para los dos primeros archivos PDF:
//Opening up the first two files (Batch Number 1 & Batch Number 2) from the folder
Open(
"C:\Example folder\Batch 1.pdf",
PDF Tables(
Table(
table name( "Batch 1" ),
add rows( page( 1 ), Rect( 0.4143, 5.3995, 7.5889, 6.6781 ) )
)
)
)
;
Open(
"C:\Example folder\Batch 2.pdf",
PDF Tables(
Table(
table name( "Batch 2" ),
add rows( page( 1 ), Rect( 0.4143, 5.3995, 7.5889, 6.6781 ) )
)
)
)
;
//Concatenating the data for the first 2 batches into one table and adding a source column:
Data Table( "Batch 1" ) << Concatenate(
Data Table( "Batch 2" ),
Create source column,
Output table("Concat")
)
;
//Splitting by the concatenated table by the Characteristic column and grouping by source column (batch number) to create a Final table:
Data Table( "Concat" ) << Split(
Split By( :Characteristic ),
Split( :Value ),
Group( :Source Table ),
Remaining Columns( Drop All ),
Sort by Column Property,
Output table("Final")
)
;
//Close all other tables
Close("Batch 1", no save)
;
Close("Batch 2", no save)
;
Close("Concat", no save)Necesito adaptar este script para abrir todos los archivos PDF (no solo los dos primeros) para crear la tabla final de datos, etiquetados por el nombre del archivo PDF.
Hay alguien que pueda ayudarme?
Muchas gracias,
Alicia
Si tiene dos funcionando, el código en Concatenar tablas de datos probablemente te lleve allí. FilesInDirectory () puede ser la función que necesita.
Hay varios ejemplos similares; la búsqueda de archivos en el directorio probablemente los encontrará.
Pregunta de nuevo si eso no te lleva allí, creo que estás cerca.
A continuación, se muestra un ejemplo que contiene los pasos necesarios. El puesto de @Craige_Hales ayuda a comprender cómo funcionan estas cosas.
Names Default To Here( 1 );
// Prepare a directory
tempdir = "$TEMP\pdf_test";
If( !Directory Exists( tempdir ),
Create Directory( tempdir ),
file_lst = Files In Directory( tempdir );
For( i = 1, i <= N Items( file_lst ), i++,
Delete File( tempdir || "/" || file_lst[i] )
);
);
// Open sample Table
cdt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Prepare PDF's
For( i = 1, i <= 10, i++,
jrn = cdt << Journal;
jrn << save pdf( tempdir || "/" || Char( i ) || "_Big Class.pdf" );
jrn << close window;
);
// Read PDF's
file_lst = Files In Directory( tempdir );
table_lst = {};
For( i = 1, i <= N Items( file_lst ), i++,
Insert Into( table_lst, Open( tempdir || "/" || file_lst[i], PDF All Tables() ) )
);
// Concat PDF's
If( N Items( table_lst ) > 1,
result_table = table_lst[1] << concatenate( table_lst[2 :: N Items( table_lst )], Output Table( "ResultTable" ), Create Source Column )
);
// Close single PDF's
For( i = 1, i <= N Items( table_lst ), i++,
Close( table_lst[i], noSave )
);
split_table = result_table << Split(
Split By( :sex ),
Group( :Source Table ),
Split( :age ),
Remaining Columns( Drop All ),
Sort by Column Property, output table("Split_Result")
);Muchas gracias @Craige_Hales y @Georg para su ayuda. Lo intentaré y veré si puedo adaptar el guión. ¡Muy apreciado!