Programa de ejecución de AppleScript JMP 15 ()Nunca he usado Run Program () antes, y necesito ayuda. Como JMP no puede abrir archivos Excel protegidos con contraseña, estoy trabajando en un pequeño Applescript para abrirlos y exportarlos como .csv sin protección. Me gustaría ejecutar este Applescript desde un script JSL. Tal vez si funciona bien, crearé una pequeña función de usuario JMP para envolverla, de modo que pueda simular en JMP la capacidad de abrir Excel protegido con contraseña.
PERO ... Estoy teniendo problemas para discutir Ejecutar programa (). Unas cuantas preguntas.
1) Si mi Applescript se guarda como una aplicación (extensión .app) o como un script (extensión .scpt).
2) Mi sintaxis JSL se ve así:
Run Program( Executable( "Users/me/Desktop/myscript.scpt" ) )
pero no funciona, dando el siguiente error:
launch path not accessible in access or evaluation of 'Glue' , Names Default To Here( 1 ); /*###*/Run Program(
Executable( "/Users/me/Desktop/re.scpt" )
) /*###*/;
In the following script, error marked by /*###*/
Names Default To Here( 1 ); /*###*/Run Program(
Executable( "/Users/me/Desktop/re.scpt" )
) /*###*/;
Una vez más, he intentado usar .app y .scpt y ninguna extensión en absoluto, sin alegría.
Obviamente, voy a tener que agregar un código adicional para manejar el archivo de exportación .csv resultante, pero por ahora, solo necesito despegar con un Applescript básico.
Gracias por cualquier ayuda.
Re: Programa de ejecución de AppleScript JMP 15 ()Hola @John Madden ,
Guardaría su script como .app, y luego usaría algo como lo siguiente para abrir esa aplicación, que usa el ejecutable 'abrir' para abrir el .app:
Run Program(
Executable( "/usr/bin/open"),
options( {"/users/me/Desktop/myscript.app"} )
);
¡Espero que esto te ayude a comenzar!
@Julian
Re: Programa de ejecución de AppleScript JMP 15 ()¡¡Perfecto!! ¡¡¡Gracias!!!Re: Programa de ejecución de AppleScript JMP 15 ()Solo un pequeño seguimiento de esto, tal vez algunos usuarios de Mac puedan encontrar útil.
La idea de Applescript no funcionó, no por JSL, sino por las limitaciones en el script de MSExcel bajo OSX 10.15. (Guardar comandos en Excel ya no funciona correctamente, aparentemente debido al sandboxing; me dijeron que Microsoft necesita actualizar su compatibilidad con Applescript. )
En cambio, decidí escribir lo que necesitaba usando Keyboard Maestro (KM), que es una muy buena aplicación de scripting / macro OSX. (Lo recomiendo encarecidamente, no tengo conflictos de intereses).
Escribí el guión que necesitaba en KM. Luego escribí una pequeña función JSL que invoca un script KM:
Add Custom Functions(
New Custom Function(
"ex",
"Run KMScript",
Function( {scriptID, paramlist = {}},
{paramstring},
paramstring = Concat Items( paramlist );
Run Program(
Executable( "/usr/bin/osascript" ),
Options(
"-e tell application \!"Keyboard Maestro Engine\!" to do script \!"" || scriptID || "\!" with parameter \!"" || paramstring ||
"\!""
)
);
)
) << Prototype( "ex:Run KMScript( scriptID as string, < {param1 as string, param2 as string, etc.} > )" ) << Parameter( "String", "scriptID" ) <<
Parameter( "List", "parameter(s)" ) << Formula Category( "Utility" ) << Description(
"Runs a Keyboard Maestro script. The KM scriptID is a UUID; you can reveal and copy it by opening the 'Or trigger by shell script' text box at the top of your KM macro window. The (optional) parameters to the KM script can be retrieved inside the KM macro using the KM '%TriggerValue' token. KM receives them as a single concatenated string of space-separated values."
)
);En este momento, estoy usando esto dentro de mi JSL para invocar una macro KM que abre el archivo Excel protegido en Numbers, lo desprotege, lo guarda como csv, lo abre en JMP y luego cierra Numbers. Funciona bien.
Espero que alguien más pueda encontrar esto útil.
Re: Programa de ejecución de AppleScript JMP 15 ()¡Esto es fantástico, John! Me alegra que hayas compartido esto, estoy seguro de que será útil para alguien.
@Julian Re: Programa de ejecución de AppleScript JMP 15 ()Gracias Julian.
Aquí hay una versión ligeramente mejorada, que le permite devolver un valor de la macro KM al incluir una acción KM "Establecer el portapapeles del sistema en texto ..." como la última acción de su secuencia de comandos KM. La función JSL luego usa el contenido del portapapeles como su valor de retorno de función.
Además, me di cuenta de que no tiene que usar el macro UUID de KM; funciona igual de bien si solo usa el nombre simple de la macro KM.
Add Custom Functions(
New Custom Function(
"ex",
"Run KMScript",
Function( {scriptID, paramlist = {}},
{paramstring, savedClipboard, macroResult = ""},
paramstring = Concat Items( paramlist );
savedClipboard = Get Clipboard();
Run Program(
Executable( "/usr/bin/osascript" ),
Options(
"-e tell application \!"Keyboard Maestro Engine\!" to do script \!"" || scriptID || "\!" with parameter \!"" || paramstring ||
"\!""
)
);
macroResult = Get Clipboard();
Set Clipboard( savedClipboard );
Return( macroResult );
)
) << Prototype( "ex:Run KMScript( scriptID as string, < {param1 as string, param2 as string, etc.} > )" ) << Parameter( "String", "scriptID" )
<< Parameter( "List", "parameter(s)" ) << Formula Category( "Utility" ) << Description(
"Runs a Keyboard Maestro (KM) script. The KM scriptID is either the KM macro's name or UUID. (You can reveal and copy the UUID by opening the 'Or trigger by shell script' text box at the top of your KM macro window.) The (optional) parameters to the KM script can be retrieved inside the KM macro using the KM '%TriggerValue%' token. KM receives them as a single concatenated string of space-separated values. If you want to return a value from KM, push it to the system clipboard before exiting the macro. This function will grab the clipboard contents and use as the function return value. (The function saves and restores the pre-invocation clipboard state, so the system clipboard is unaffected by the function.)"
)
);