Problem
Wenn Sie eine Datei in einem externen Programm öffnen müssen, funktioniert normalerweise die JSL Open()-Funktion für Sie. Wenn Sie jedoch einen Dateityp öffnen möchten, den JMP importieren kann, wird die Datei wahrscheinlich importiert und nicht im externen Programm geöffnet. Das Öffnen einer Excel-Datei ist ein häufiger Anwendungsfall dafür.
Lösung
Dazu können wir die JSL-Funktion RunProgram() verwenden. Windows erfordert eine spezielle Behandlung, damit JMP nicht eingefroren wird, bis das Programm geschlossen wird, und der Prozess auch nicht geschlossen werden muss, bevor JMP geschlossen wird.
/* Function: openFileInOSDefault
Open file in the operating system default program
Arguments:
filepath - local path file
*/
openFileInOSDefault = Function({filepath},
If( Host is( "Windows" ),
Run Program(
Executable( "PowerShell.exe" ),
Options(
Eval Insert( "\[-Command "& {Start-Process '^filepath^'}"]\" )
),
Read function( "text" )
);
,
RunProgram(
Executable( "/usr/bin/open" ),
Options( filepath ),
ReadFunction( "text" )
)
);
);
Diskussion
Im Allgemeinen glaube ich nicht, dass Sie verstehen müssen, wie genau das funktioniert, und Sie können dies in Ihre Skripte einfügen und es mit einem Pfad zu der Datei aufrufen, die Sie öffnen möchten.