使用通配符開啟多個 Excel 檔案的 JSL 腳本。你好,有人可以幫我編寫 JSL 程式碼以使用通配符開啟多個 excel 檔案嗎?
回覆:JSL 腳本使用通配符開啟多個 Excel 檔案。在這種情況下,您還可以考慮使用帶有“multiple”關鍵字的“選擇檔案”功能。 從腳本索引:
Names Default To Here( 1 );
Files =
Pick File(
"Select JMP File",
"$SAMPLE_DATA",
{"JMP Files|jmp;jsl;jrn", "All Files|*"},
1,
0,
"",
"multiple"
);
For( i = 1, i <= N Items( Files ), i++,
Try( Open( Files[i] ) )
);回覆:JSL 腳本使用通配符開啟多個 Excel 檔案。感謝您的回覆。 我想我應該使用通配符來選擇所有檔案(例如 *.*)。 似乎正規表示式非常適合根據某些條件選擇特定檔案。 看來我現在需要,我可以使用 for 迴圈來開啟所有檔案。 我確信稍後我將需要正規表示式以獲得更大的靈活性。回覆:JSL 腳本使用通配符開啟多個 Excel 檔案。您最初的問題要求在選擇要讀入 JMP 的檔案名稱時能夠使用萬用字元。RegEx() 具有允許使用通配符的語法。@ih說明如何建構 RegEx() 函數以傳回符合使用通配符結構的檔案名稱。
現在問題需要回到您身上來限定您指定「使用萬用字元」時的內容是什麼?
回覆:JSL 腳本使用通配符開啟多個 Excel 檔案。如果您想要開啟該目錄中的每個檔案(您知道它們都是 xls 檔案),那麼您就完成了,而無需擔心正規表示式。如果您只想打開以“我的文件”開頭並以“.xls”結尾的文件,那麼您可以透過在 for 循環中添加 if 語句來確保該文件符合您的條件,與此類似。
*未經測試的程式碼*
// Read all the file names
files = Files In Directory( "C:\Users\MyUserName\Documents\My Data\" );
X = N Items( files );
Y = "C:\Users\MyUserName\Documents\My Data\";
dt = New Table( "My data file" );
For( i = 1, i < X, i++,
if( !is missing( regex( files[i], "my file.*\.xls", "\0" , IGNORECASE ) ),
//open jmp files for each xls files.
dt1 = Open(
Y || files[i],
Worksheets( "my xls worksheet" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 1 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 )
)
);
dt1 << Set Name( files[i] );
//I concatenated all the files in one jmp file and close it each time.
dt << Concatenate( Data Table( dt1 ), "Append to first table" );
Close( dt1 );
);
);回覆:JSL 腳本使用通配符開啟多個 Excel 檔案。你好,
感謝您花時間給我解決方案。 你的解決方案有效。 我使用了以下腳本:
但是,我不確定如何在這裡使用正規表示式以及使用正規表示式有何好處。
我的腳本:
// Read all the file names
files = Files In Directory( "C:\Users\MyUserName\Documents\My Data\" );
X = N Items( files );
Y = "C:\Users\MyUserName\Documents\My Data\";
dt = New Table( "My data file");
For( i = 1, i < X, i++,
//open jmp files for each xls files.
dt1 = Open(
Y || files[i],
Worksheets( "my xls worksheet" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 1 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 )
)
);
dt1 << Set Name( files[i] );
//I concatenated all the files in one jmp file and close it each time.
dt << Concatenate( Data Table( dt1 ), "Append to first table" );
Close( dt1 );
);
回覆:JSL 腳本使用通配符開啟多個 Excel 檔案。這是一種可以幫助您入門的方法。除非其他使用者輸入搜尋短語,否則我建議您自己指定正規表示式。 正規表示式是一個很好的資源。
//list all files in directory
files = Files in Directory( Pick Directory() );
//a string with wildcards, * for any string and ? for exactly one character
str = "My?Files*.xls*";
//Replace windcards with regex character classes. Note that this does
//not protect against all strings a user might enter
rgx = Substitute( str, ".", "\.", "*", ".*", "?", "." );
//Or just specify the regex yourself
rgx = "My Files.*\.xlsx?";
//Check each file, if it matches then open it
if( N items( files ) > 0,
for( i = 1, i <= N items( files ), i++,
if( !is missing( regex( files[i], rgx, "\0" , IGNORECASE ) ),
//Open script goes here
Show( files[i] );
)
)
);