Contourner l'assistant d'importation Excel dans le scriptJ'essaie d'ouvrir un fichier .xslx à partir d'une application JMP lorsque vous appuyez sur le bouton "OK" d'une fenêtre d'application. Mon problème est que j'ai du mal à contourner la fenêtre de l'assistant Excel et à l'ouvrir directement.
Je souhaite que le fichier s'ouvre dans JMP à l'aide des options Excel que je spécifie dans une instruction Open(). Pour que mes options d'instruction Open() soient correctes, j'ai ouvert le fichier manuellement et copié l'instruction Open() à partir du script Source de la table, donc je pense que toutes ces options sont correctes. Il s'agit d'un fichier Excel multi-feuilles de calcul, et je ne veux qu'une seule feuille de calcul dans JMP, alors voici à quoi ressemble mon état Open() :
Open(
"~/Desktop/test.xlsx",
Worksheets( "Data" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
Bizarrement, lorsque j'exécute cette instruction open dans un script indépendant, tout se passe comme je le souhaite : le fichier s'ouvre directement sans que le volet de l'assistant Excel n'apparaisse.
Cependant, lorsque j'inclus l'instruction Open() identique dans le script d'une application JMP que je construis, je n'arrive pas à empêcher l'ouverture du volet de l'assistant. (L'instruction Open() est appelée lorsque je clique sur le bouton "OK" de la fenêtre de saisie utilisateur de mon application.)
Avez-vous une idée de la raison pour laquelle cela se produit et comment l'arrêter ?
Re : Contourner l'assistant d'importation Excel dans le script@mjoner - Oui, cette solution de contournement est toujours requise via au moins JMP 16.0.
Re : Contourner l'assistant d'importation Excel dans le script@danschikore La procédure référencée ici est-elle toujours le seul moyen d’y parvenir ? Y a-t-il une idée pour supprimer le besoin d'écrire dans cette bidouille pour obtenir le comportement de script souhaité ?
Re : Contourner l'assistant d'importation Excel dans le scriptDan,
Merci pour ce suivi. J'avais finalement essayé tout le reste et j'ai fini par utiliser @MS La solution d'intégrer l'instruction open dans un fichier Include(). Cela explique ce qui se passe et propose une solution de contournement différente.
JohnRe : Contourner l'assistant d'importation Excel dans le scriptIl s'avère que le comportement est différent sous Windows et Mac, probablement en raison des différences dans les bibliothèques prises en charge pour la lecture des fichiers Excel.Sur Mac, un script Open() appelé directement ouvrira le fichier comme prévu, mais un appel Open() invoqué à partir d'un clic sur un bouton fera apparaître l'assistant Excel.
La solution de contournement qui @MS fourni force JMP en mode "batch", ce qui modifie la logique pour se comporter comme si le script était exécuté directement plutôt que via un bouton.Une autre façon de faire cela, sans nécessiter de fichier intermédiaire, consiste à intégrer votre script dans une ScriptBox et à appeler <
// One way to force JMP into batch mode is to embed the script in a ScriptBox
// and invoke <<RUN on="" the="" script="" box.="" new="" window=""></RUN>
Re : Contourner l'assistant d'importation Excel dans le scriptDan, merci d'avoir répondu. Je vais essayer cela et je vous enverrai séparément l'application à l'origine de mon problème. Donne-moi un peu. JohnRe : Contourner l'assistant d'importation Excel dans le scriptJ'ai essayé de reproduire ce problème avec JMP 13/14/15 à l'aide de l'application JMP ci-jointe.Le script d'appui sur le bouton est présenté ci-dessous et ouvre correctement le tableau dans toutes les versions que j'ai essayées jusqu'à présent.Cet exemple fonctionne-t-il pour vous ?En quoi cela diffère-t-il de l'application que vous développez et quelle version de JMP utilisez-vous ?
Button1Press = Function( {this},
// This function is called when the button is pressed
Open(
"$SAMPLE_IMPORT_DATA\VA Lung Cancer.xls",
Worksheets( "VA Lung Cancer" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
);
Re : Contourner l'assistant d'importation Excel dans le scriptMerci, madame. Cela sera utile à l’avenir. Entre-temps, j'ai trouvé une solution de contournement différente pour ma situation, mais c'est une bonne chose de l'avoir dans la boîte à outils pour la prochaine fois.
Il y a une section dans le Guide de script (p. 333) qui traite de la sensibilité contextuelle de la fonction Open() et la relie à l'Assistant Excel, mais je ne la trouve pas très claire. Je ne peux m'empêcher de penser que le comportement discuté ici est soit une lacune (?bug) dans l'implémentation d'Open(), soit nécessite plus de documentation.
Par exemple, une chose qui serait géniale serait une option explicite dans Open() indiquant s'il faut ou non utiliser l'assistant, au lieu de saisir une préférence. Juste mes deux cents.
Re : Contourner l'assistant d'importation Excel dans le scriptJ'ai également vécu cela et j'ai trouvé une solution de contournement. Sauver la Ouvrir() commande en tant que script séparé et utilisez Inclure() pour exécuter le code.
// Create a jsl file with the Open() command
f = Save Text File(
"~/Desktop/test.jsl",
Char(
Name Expr(
Open(
"~/Desktop/test.xlsx",
Worksheets( "Data" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
)
)
);
// Invoke Open() via user input
nw = New Window( "open test", Button Box( "OK", Include( f ) ) );Re: Contourner l'assistant d'importation Excel dans le scriptSi quelqu'un se pose des questions à ce sujet, voici une approche alternative : 1. Obtenez et stockez la préférence de l'utilisateur pour la méthode d'ouverture d'Excel ; 2. Modifiez-la selon vos besoins ; 3. Ouvrez le fichier ; 4. Rétablissez le paramètre à ce qu'il était
par exemple
originalPref = Obtenir les préférences (méthode d'ouverture Excel) ;
Définir la préférence (méthode d'ouverture Excel (« Ouvrir toutes les feuilles »));
monChemin = Choisir le fichier(....etc
dt = Ouvrir(monChemin...)
évaluer(originalPref)
Re: Contourner l'assistant d'importation Excel dans le scriptJ'ai toujours ce problème avec JMP 17.2 sur mon Mac, et mon code pour ouvrir la feuille Excel comporte des variables qui nécessitent que l'utilisateur saisisse la valeur.