如何從動態數據導入中使用文件名自動更新行?我正在編寫一個腳本,將文件夾中的多個文件導入到單個數據表中。 我創建了一個列出 USP_ID 的列,我希望文件名出現在每一行中。 雖然數據導入正確,但此列中僅顯示最終導入的 excel 文件的名稱,而我希望每個文件名顯示在與其各自數據對應的行中。
我在下面列出了我的腳本,我認為這行會導致我出現問題,儘管我不知道如何對其進行排序。 任何建議將不勝感激!
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" );
);
);回复:如何從動態數據導入中自動更新帶有文件名的行?嗨,梅蘭妮,
感謝您的幫助,雖然我無法讓您的建議按照我想要的方式工作,但我發現通過在連接它們之前將 Source 列分配給數據表可以:
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);
);回复:如何從動態數據導入中自動更新帶有文件名的行?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>
Set Each Value 將列中的所有值設置為一個常數。 因此,對於每個循環,您都將該列中的每個單元格設置為當前文件名。 您只需要設置剛剛連接到文件名的表格中的“新”單元格。 也許是這樣的?
cc_dt << 選擇位置(cc_dt:USP_ID == ""); // 選擇空單元格,假設前面的單元格都有它們的文件名值
selrows = cc_dt << 獲取選定的行(); // 獲取被選中的行號
cc_dt:USP_ID[selrows] = filenow; // 僅將該列中的那些行設置為文件名
高溫下,
梅蘭妮