Come aggiornare automaticamente le righe con il nome del file da un'importazione dinamica dei dati?Sto lavorando a uno script che importa più file da una cartella in una singola tabella di dati. Ho creato una colonna elencata USP_ID, in cui vorrei che il nome del file apparisse in ogni riga. Sebbene i dati vengano importati correttamente, in questa colonna viene visualizzato solo il nome del file di Excel importato finale, mentre vorrei che ogni nome di file venisse visualizzato nelle righe corrispondenti ai rispettivi dati.
Ho elencato la mia sceneggiatura qui sotto, con la linea che credo mi stia causando problemi, anche se non ho la minima idea di averlo risolto. Qualsiasi suggerimento sarà molto apprezzato!
Names Default To Here( 1 );
Clear Symbols();
filelist = {};
filepath = Munger( Pick Directory( "Select the desired file directory" ), 1, "/", "" );
prefilelist = Files In Directory( filepath );
n2 = N Items( prefilelist );
For( i2 = 1, n2 >= i2, i2++,
file = (prefilelist[i2]);
If( Item( -1, prefilelist[i2], "." ) == "xlsm" | Item( -1, prefilelist[i2], "." ) == "xlsx",
Insert Into( filelist, file ),
Show( file )
);
);
nf = N Items( filelist );
cc_dt = New Table( "Combined data " );
cc_dt << New Column( "USP_ID", character, nominal );
For( iii = 1, iii <= nf, iii++,
filenow = (filelist[iii]);
fileopen = (filepath || filenow);
dt = Open( fileopen );
dt << Run Formulas();
cc_dt << Concatenate( Data Table( dt ), append to first table );
cc_dt:USP_ID << set each value( filenow ); // having issues with this I think?
Close( dt, nosave );
);
colList = cc_dt << get column names( character, string );
For( i = 1, i <= N Items( colList ), i++,
selRows = cc_dt << get rows where(
Column( cc_dt, colList[i] )[Row()] == "NaN" | Column( cc_dt, colList[i] )[Row()] == "0"
);
If( N Rows( selRows ) > 0,
Column( cc_dt, colList[i] )[selRows] = "0";
Column( cc_dt, colList[i] ) << data type( "numeric" ) << modeling type( "continuous" );
);
);Ri: Come aggiornare automaticamente le righe con il nome del file da un'importazione dinamica dei dati?Ciao Melanie,
Grazie per l'aiuto, anche se non sono riuscito a far funzionare la tua raccomandazione come volevo, ho scoperto che assegnando le colonne di origine alle tabelle di dati prima di concatenarle farebbe:
nf = N Items( filelist ); //number of items in the working list
cc_dt = New Table( "Combined fermenter data " );
cc_dt << New Column( "Source", character, nominal );
cc_dt << New Column( "USP_ID", character, formula( Substr( :Source, 1, 7 ) ) );
For( iii = 1, iii <= nf, iii++, //this starts the first loop
filenow = (filelist[iii]);
fileopen = (filepath || filenow);
dt = Open( fileopen );
dt << Run formulas();
dt << new column("Source", character, set initial data(filenow));
cc_dt << Concatenate( Data Table( dt ), append to first table );
close(dt, nosave);
);Ri: Come aggiornare automaticamente le righe con il nome del file da un'importazione dinamica dei dati?cc_dt<SPAN class="token punctuation">:</SPAN>USP_ID <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> set each value</SPAN><SPAN class="token punctuation">(</SPAN> filenow <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
Imposta ogni valore imposta tutti i valori di una colonna su una costante. Quindi con ogni ciclo, stai impostando ogni cella di quella colonna sul nome file corrente. Avrai bisogno di impostare solo le "nuove" celle dalla tabella che è stata appena concatenata al nome file. Forse qualcosa del genere?
cc_dt << Selezionare Dove (cc_dt: USP_ID == ""); // seleziona celle vuote, assumendo che le celle precedenti abbiano tutti i loro valori di nome file
selrows = cc_dt << Get Selected Rows (); // ottiene i numeri di riga che sono selezionati
cc_dt: USP_ID [seleziona] = filenow; // imposta solo quelle righe in quella colonna al nome del file
HTH,
Melanie