Ciao,
Ho una cartella contenente oltre 100 PDF, tutti disposti in un formato coerente. Il nome del file di ogni PDF rappresenta un numero di lotto che voglio utilizzare e in ogni PDF c'è una particolare tabella di dati che voglio estrarre.
Il mio scopo è estrarre la stessa tabella di dati per ogni PDF, quindi concatenare tutte le tabelle di dati estratte, contrassegnate dal nome del file PDF (numero di lotto). Infine voglio dividere le colonne nella tabella concatenata e raggrupparla per nome del file PDF per finire con una tabella finale.
Ho provato a farlo manualmente e posso arrivare al tavolo finale di cui ho bisogno, tuttavia è estremamente dispendioso in termini di tempo poiché devo aprire e selezionare il tavolo in ogni PDF separatamente.
Pertanto, mi chiedo se ci sia qualche JSL che sarà in grado di aiutare con questo?
Sono molto nuovo nello scripting ma sono stato in grado di creare uno script che mi dà esattamente ciò di cui ho bisogno per i primi due file 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)Ho bisogno di adattare questo script per aprire tutti i file PDF (non solo i primi due) per creare la tabella dei dati finale, contrassegnata dal nome del file PDF.
C'è qualcuno che può aiutarmi?
Grazie molto,
Alicia
Se ne hai due funzionanti, il codice in Tabelle dati concatenate probabilmente ti ci porterà. FilesInDirectory () potrebbe essere la funzione di cui hai bisogno.
Ci sono una serie di esempi simili; la ricerca di file nella directory probabilmente li troverà.
Chiedi di nuovo se questo non ti porta lì, penso che ci sei vicino.
Ecco un esempio che contiene i passaggi necessari. Il post di @Craige_Hales aiuta a capire come funzionano queste cose.
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")
);Grazie mille @Craige_Hales e @ Georg per il tuo aiuto. Vado a vedere se riesco ad adattare la sceneggiatura. Molto apprezzato!