Programme d'exécution AppleScript JMP 15()Je n'ai jamais utilisé Run Program() auparavant et j'ai besoin d'aide. Étant donné que JMP ne peut pas ouvrir les fichiers Excel protégés par mot de passe, je travaille sur un petit Applescript pour les ouvrir et les exporter au format .csv non protégé. J'aimerais exécuter cet Applescript à partir d'un script JSL. Peut-être que si cela fonctionne bien, je créerai une petite fonction utilisateur JMP pour l'envelopper, afin que je puisse simuler dans JMP la possibilité d'ouvrir Excel protégé par mot de passe.
MAIS… j'ai du mal à me disputer avec Run Program(). Quelques questions.
1. Mon Applescript doit-il être enregistré en tant qu'application (extension .app) ou en tant que script (extension .scpt).
2. Ma syntaxe JSL ressemble à ceci :
Run Program( Executable( "Users/me/Desktop/myscript.scpt" ) )
mais cela ne fonctionne pas, donnant l'erreur suivante:
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" )
) /*###*/;
Encore une fois, j'ai essayé d'utiliser .app et .scpt et aucune extension du tout - pas de joie.
Évidemment, je vais devoir ajouter du code supplémentaire pour avoir une idée du fichier d'exportation .csv résultant, mais pour l'instant, j'ai juste besoin de démarrer avec l'exécution d'un Applescript barebone.
Merci pour toute aide.
Re : Programme d'exécution AppleScript JMP 15()Merci, Julien.
Voici une version légèrement améliorée, qui vous permet de renvoyer une valeur de la macro KM en incluant une action KM "Définir le presse-papiers système sur texte…" comme dernière action de votre script KM. La fonction JSL utilise alors le contenu du presse-papiers comme valeur de retour de la fonction.
De plus, j'ai réalisé que vous n'aviez pas besoin d'utiliser l'UUID de la macro KM ; cela fonctionne aussi bien si vous utilisez simplement le nom plain-vanilla 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.)"
)
);Re : Programme d'exécution AppleScript JMP 15()C'est fantastique, John ! Je suis ravi que vous ayez partagé cela, je suis certain que cela sera utile à quelqu'un.
@julienRe : Programme d'exécution AppleScript JMP 15()Juste un petit suivi à ce sujet, peut-être que certains utilisateurs de Mac pourraient trouver utile.
L'idée d'Applescript n'a pas fonctionné - non pas à cause de JSL, mais à cause des limitations de l'applescript MSExcel sous OSX 10.15. (Les commandes d'enregistrement dans Excel ne fonctionnent plus correctement, apparemment à cause du sandboxing ; on me dit que Microsoft doit mettre à jour son support Applescript. )
Au lieu de cela, j'ai décidé de scripter ce dont j'avais besoin en utilisant Keyboard Maestro (KM), qui est une très bonne application de script/macro OSX. (Je le recommande vivement - je n'ai aucun conflit d'intérêts.)
J'ai écrit le script dont j'avais besoin dans KM. Ensuite j'ai écrit une petite fonction JSL qui invoque 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 ce moment, je l'utilise dans mon JSL pour invoquer une macro KM qui ouvre le fichier Excel protégé dans Numbers, le déprotége, l'enregistre au format csv, l'ouvre dans JMP, puis ferme Numbers. Ça fonctionne bien.
J'espère que quelqu'un d'autre pourrait trouver cela utile.
Re : Programme d'exécution AppleScript JMP 15()Parfait!! Merci!!!Re : Programme d'exécution AppleScript JMP 15()Salut @john_madden ,
Je voudrais enregistrer votre script en tant que .app, puis utiliser quelque chose comme ce qui suit pour ouvrir cette application, qui utilise l'exécutable 'open' pour ouvrir le .app :
Run Program(
Executable( "/usr/bin/open"),
options( {"/users/me/Desktop/myscript.app"} )
);
J'espère que cela vous aidera à démarrer !
@julien