Salut,
J'ai deux problèmes avec le Créer un classeur Excel appelez un script JMP et j'espère que quelqu'un ici pourra me donner un aperçu.
je suis entrain de courir JMP Pro 15.2.1 sur Windows 10 .J'ai un script qui maintient une paire de tables invisibles (:: dt_wj et :: dt_ma ci-dessous) qui sont mises à jour par l'utilisateur via une fenêtre d'interface utilisateur non modale.L'un des boutons de cette fenêtre est censé générer un nouveau classeur Excel dans le dossier TEMP de l'utilisateur via le code ci-dessous:
::excelpath = Trim(<BR /> Run Program( Executable( "C:\Windows\System32\where.exe" ), Options( {"/R", "C:\", "excel.exe"} ), Read Function( "text" ) )<BR />);<BR />temppath = Convert File Path( "$TEMP", Absolute, Windows );
timestamp = Round( Tick Seconds() );
filename = "MAWJ" || Char( timestamp );
filepath = Convert File Path(temppath||filename,Absolute,Windows);
Try(
Create Excel Workbook(
filepath,
{::dt_wj,::dt_ma},
{"WJ","MA"}
);
,//else
Write("Failed to create workbook!\!N");
//Return(Empty());
);
If( !Is File( filepath||".xslx" ),
Write("File does not exist!\!N");
//Return(Empty());<BR />);
Write( "Opening with Excel..." );
Try(<BR /> Run Program( Executable( ::excelpath ), Options( Eval List( {"/e", filepath} ) ) )<BR />,//else<BR /> Write( "Failed!!!\!N" );<BR /> //Return(filepath);<BR />);
Write( "Done.\!N" );<BR />//Return(filepath);Comportement étrange 1 : Lorsque j'exécute le code comme écrit ci-dessus ( il est enveloppé dans une fonction dans mon code, d'où le commentaire des instructions Return ), il passe le premier bloc Try ( où ça appelle Créer un classeur Excel ) sans exécuter la clause catch, cependant, la ligne de code suivante ( essai Est un fichier ) renvoie 0.Lorsque je vérifie le dossier temporaire, je vois qu'un fichier temporaire a été créé, mais le nom du fichier a un '-' ajouté avant l'extension: par exemple ' MAWJ259022-.xlsx ».Cependant, plus étrange encore, si j'ajuste le Est un fichier test pour inclure le trait d'union inexplicable:
If( !Is File( filepath||"-.xslx" ),<BR /> Write(Eval Insert("File ^filepath||\!"-.xslx\!"^ does not exist!\!N"));<BR /> Return( Empty() );<BR />);Cela échoue toujours, même si je peux voir de mes propres yeux un classeur Excel de 5 Ko avec ce chemin de fichier précis tel que vérifié via la sortie du journal.
Comportement étrange 2 : Deux des colonnes de l'une de mes tables JMP contiennent de grands numéros d'identification ( 12 et 16 chiffres respectivement ) qui sont conservées dans les colonnes de caractères dans JMP ( car ce ne sont pas vraiment des nombres mais des identifiants ).Quand je ( manuellement pour l'instant ) ouvrez le fichier Excel dans le dossier temporaire, ces colonnes sont lues dans Excel en tant que Numérique ou Général, même si la colonne de la table JMP à partir de laquelle je sauvegarde est définitivement Caractère / Nominal.Ceci est problématique car Excel ne peut pas gérer le nombre à 16 chiffres et tronque les 2 derniers chiffres et convertit le nombre à 12 chiffres en notation scientifique, rendant les deux identifiants inutiles.Il me semble que si JMP génère le fichier Excel lui-même, il devrait être en mesure de définir le type de données de la colonne Excel pour qu'il corresponde au type de données JMP-analogique le plus proche du processus.
J'ai essayé d'éviter cela en générant des fichiers CSV temporaires pour chaque table de données, puis en les récupérant dans JMP via Charger un fichier texte , en ajustant les colonnes pour lire diverses combinaisons de Insertion d'évaluation ( "= TEXTE (^ regexresult [1] ^, \!" ########### \! ")" ) ou Insertion d'évaluation ( "= '^ regexresult [1] ^") ou même des trucs bizarres que j'ai trouvés sur la gestion du CSV d'Excel, comme essayer des guillemets triplés dans les données de la colonne.Rien de tout cela ne semble m'amener à exceller en essayant de catégoriser automatiquement mes données et de les ruiner, donc j'espère vraiment qu'il y a un moyen de faire en sorte que JMP le fasse de la bonne manière à la place.
Il y a un troisième comportement Je voudrais éviter, à savoir que JMP ne répond pas tant que l'instance Excel lancée avec Run Program n'est pas fermée, mais je soupçonne que c'est un problème plus important à résoudre et que sa résolution est secondaire à mon objectif principal ici.
Tout aperçu ou commentaire / suggestion sur les choses à essayer serait grandement apprécié, merci!
La balise script a modifié une partie de ce code en raison du style de commentaire dans les instructions try & if, republiées ci-dessous sans commentaires pour fournir un code fonctionnel.
::excelpath = Trim( Run Program( Executable( "C:\Windows\System32\where.exe" ), Options( {"/R", "C:\", "excel.exe"} ), Read Function( "text" ) ) );
temppath = Convert File Path( "$TEMP", Absolute, Windows );
timestamp = Round( Tick Seconds() );
filename = "MAWJ" || Char( timestamp );
filepath = Convert File Path( temppath || filename, Absolute, Windows );
Try(
Create Excel Workbook( filepath, {::dt_wj, ::dt_ma}, {"WJ", "MA"} ),
Write( "Failed to create workbook!\!N" );
);
If( !Is File( filepath || ".xslx" ),
Write( "File does not exist!\!N" )
);
Write( "Opening with Excel..." );
Try( Run Program( Executable( ::excelpath ), Options( Eval List( {"/e", filepath} ) ) ), Write( "Failed!!!\!N" ) );
Write( "Done.\!N" );