使用通配符打开多个 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] );
)
)
);