Bonjour la communauté JMP,
C'est la première fois que je poste et mon premier grand projet de script JMP, alors s'il vous plaît, soyez indulgents avec moi.
But: Avoir un tableau de bord JMP qui ouvre et analyse tous les fichiers Excel situés dans un répertoire affichant des graphiques IR pour chaque numéro d'actif. Live dans le sens où chaque fois que le tableau de bord/script est ouvert, il s'exécute et met à jour les graphiques.
Contraintes: Impossible de modifier la mise en page des rapports Excel.
Vous trouverez ci-dessous mes extraits de code qui fonctionnent correctement indépendamment. Quand j'ai tout assemblé, JMP s'est écrasé sur moi.
J'aborde peut-être tout cela de manière incorrecte. Il peut être plus facile d'ouvrir chaque fichier et d'ajouter les colonnes à une nouvelle table de données. En fonction du nombre de colonnes, il pourrait générer un nombre X de graphiques.
Toute aide serait grandement appréciée.
Code pour créer une carte de contrôle avec ligne de référence . Souhaite extraire la valeur de la ligne de référence de la feuille de calcul jointe exigence de force champ et titre de numéro d'actif domaine.
Voir plus... Code pour ouvrir tous les fichiers du répertoire , mais les fichiers ou les données doivent avoir des en-têtes de ligne 1 et des données commençant à la ligne 2 pour fonctionner.
Voir plus...dirpath = Pick Directory();
TheFileList = Files In Directory( dirpath );
For( i = 1, i < 100, i++,
dt = Open( "F:\IPC\IPC PULL TEST RECORD LOGS\" || TheFileList[i], worksheet( "Sheet1" ) );
dt << Control Chart(
Sample Label( :Date ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Pull Force Reading, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Pull Force Reading"},
"2",
ScaleBox,
{Min( 5 ), Max( 18 ), Inc( 2 ), Minor Ticks( 1 ), Add Ref Line( 8, "Solid", "Black", "LSL", 4 )}
),
Dispatch(
{"Individual Measurement of Pull Force Reading"},
"1",
ScaleBox,
{Min( 0 ), Max( 50 ), Inc( 8 ), Minor Ticks( 0 )}
),
Dispatch( {"Individual Measurement of Pull Force Reading"}, "IR Chart of IM", FrameBox, {Frame Size( 820, 420 )} ),
Dispatch( {"Individual Measurement of Pull Force Reading"}, "IR Chart of IM", FrameBox( 2 ), {Frame Size( 65, 405 )} )
)
);
);dirpath = Choisissez Répertoire(); TheFileList = Fichiers dans le répertoire (dirpath); For( i = 1, i < 100, i++, dt = Open( "F:\IPC\IPC PULL TEST RECORD LOGS\" || TheFileList[i], worksheet( "Sheet1" ) ); dt << Control Chart( Sample Label( :Date ), Group Size( 1 ), KSigma( 3 ), Chart Col( :Pull Force Reading, Individual Measurement ), SendToReport( Dispatch( {"Individual Measurement of Pull Force Reading"}, "2", ScaleBox , {Min( 5 ), Max( 18 ), Inc( 2 ), Minor Ticks( 1 ), Add Ref Line( 8, "Solid", "Black", "LSL", 4 )} ), Dispatch( {" Mesure individuelle de la lecture de la force de traction"}, "1", ScaleBox, {Min( 0 ), Max( 50 ), Inc( 8 ), Minor Ticks( 0 )} ), Dispatch( {"Mesure individuelle de la lecture de la force de traction" }, "IR Chart of IM", FrameBox, {Frame Size( 820, 420 )} ), Dispatch( {"Mesure individuelle de la lecture de la force de traction"}, "IR Chart of IM", FrameBox( 2 ), {Frame Size (65, 405)} ) ) ); );
Code pour formater un fichier en réorganisant les en-têtes et les données .
Voir plus...dt = Open("F:\IPC\IPC PULL TEST RECORD LOGS\Asset# 3042.xlsx", worksheets("sheet1"));
dt << Delete rows (1::13);
var = dt:column 11[2];
dt:column 11[8] = var; //data
var = dt:column 11[1];
dt:column 11[7] = var; //heading
var = dt:column 3[1];
dt:column 12[7] = var; //heading
var = dt:column 3[2];
dt:column 12 [8] = var; //asset #
dt << delete rows (1::6);
dt << delete columns(1,3,5,7,9,13::25);
colNames = dt << get column names;
For( i = 1, i <= N Items( colNames ), i++,
Column( i ) << set name( Column( i )[1] )
);
dt << delete rows(1);dt = Open("F:\IPC\IPC PULL TEST RECORD LOGS\Asset# 3042.xlsx", worksheets("sheet1")); dt << Supprimer les lignes (1 :: 13); var = dt:colonne 11[2] ; dt:colonne 11[8] = var; //data var = dt:column 11[1] ; dt:colonne 11[7] = var ; //entête var = dt:column 3[1]; dt:colonne 12[7] = var ; //entête var = dt:column 3[2]; dt:colonne 12 [8] = var; //actif # dt << supprimer les lignes (1 :: 6); dt << supprimer les colonnes (1,3,5,7,9,13::25); colNames = dt << obtenir les noms de colonne ; For( i = 1, i <= N Items( colNames ), i++, Column( i ) << set name( Column( i )[1] ) ); dt << supprimer les lignes (1);
Jim,
Je vous ai vu contribuer à de nombreuses discussions au cours de mes recherches et de mon dépannage. Je suis vraiment honoré de vous voir contribuer à ma discussion ici.
Au début, j'ai eu quelques problèmes lors de l'exécution du script. Après avoir parcouru le journal et le débogueur, j'ai constaté qu'il s'arrêtait sur un certain fichier. Le fichier suivant était un fichier de test que j'avais formaté différemment. J'ai supprimé ce fichier, je n'ai pas changé le script et il a fonctionné magnifiquement . Plus tard, j'ai eu un fichier ouvert lors de l'exécution du script et j'ai reçu une autre erreur, mais c'était une solution facile (fermez le fichier).
J'ai l'intention de comprendre l'intégralité de votre code, mais j'ai quelques personnalisations supplémentaires pour lesquelles j'espère que vous pourrez également aider :
- Possible d'ajouter la valeur LSL au graphique et même de se déplacer du même côté (à droite) que l'UCL/LCL ?
- Certains ensembles de données ont un LSL de 50+. Cela ne correspond pas au graphique actuel, j'ai donc modifié la plage de 1 à 100. Existe-t-il un moyen de prendre l'exigence de force de traction et de l'utiliser à +/- 10 ou 20 pour la plage ?
- Certaines feuilles Excel sont vides. Existe-t-il un moyen d'omettre les graphiques?
Éditer : J'ai pris un peu de temps aujourd'hui pour ajouter les personnalisations ci-dessus et voici le code modifié pour ce qui précède. On dirait qu'il est assez difficile de changer l'étiquette de référence. Le seul indice que j'ai trouvé était de créer une nouvelle zone de texte et d'utiliser ce code, mais je ne sais pas comment lier la hauteur Y de la ligne de référence.
Names Default To Here( 1 );
// Delete the old Dashboard
Try( NW << close window );
dirpath = Pick Directory();
TheFileList = Files In Directory( dirpath );
// Create the Dashboard window to place the charts into
NW = New Window( "Asset Dashboard", <<JOURNAL>col=Column( Current Data Table(), "Pull Force Reading");
tableVal = col[22];
if (tableVal == "", i++);
// Capture the Force Requirement value and add it to the graph if it is valid
dt:Pull Force Reading << data type( numeric ) << modeling type( continuous );
theForceRequirement = Num( Word( 1, dt:Force Requirement[1], " " ) );
If( Is Missing( theForceRequirement ) == 0,
<STRONG>range = theForceRequirement;</STRONG>
theForceRequirement = ",Add Ref Line(" || Char( theForceRequirement ) || ", \!"Dashed\!", \!"Black\!", \!"LSL\!", 4 )";,
theForceRequirement = " "
);
// Capture the Asset number
If( dt:Name( "Asset#" )[1] == "",
theAsset = "Unknown",
theAsset = dt:Name( "Asset#" )[1]
);
// Generate the code to produce the chart along with the LSL value
theExpr =
"cc = Control Chart(invisible,
Sample Label( :Date ),
Group Size( 2 ),
KSigma( 3 ),
Chart Col( :Pull Force Reading, Individual Measurement(Show Zones( 1 ), Shade Zones( 1 ),Test 1( 1 ), Test 3( 1 ))),
SendToReport(
Dispatch(
{\!"Individual Measurement of Pull Force Reading\!"},
\!"2\!",
ScaleBox,
{Min( <STRONG>if( (range - 20) <= 0 , 0, range - 20)</STRONG> ), Max( <STRONG>range + 20</STRONG> ), Inc( 2 ), Minor Ticks( 1 )"
|| theForceRequirement ||
" }
),
Dispatch(
{\!"Individual Measurement of Pull Force Reading\!"},
\!"1\!",
ScaleBox,
{Min( 0 ), Max( 50 ), Inc( 8 ), Minor Ticks( 0 )}
),
Dispatch(
{\!"Individual Measurement of Pull Force Reading\!"},
\!"IR Chart of IM\!",
FrameBox,
{Frame Size( 820, 420 )}
),
Dispatch(
{\!"Individual Measurement of Pull Force Reading\!"},
\!"IR Chart of IM\!",
FrameBox( 2 ),
{Frame Size( 65, 405 )}
)
)
);";
// Run the generated code
Eval( Parse( theExpr ) );
// Close the outline box of the output and set the title based upon the asset value
Report( cc )[Outline Box( 1 )] << Close( 1 ) << set title( "Asset# " || theAsset );
// Append the display output to the display window
VLB << Append( Report( cc ) );
// Clean up the environment by closing the display window and the data table
//cc << close window;
//Close( dt, nosave );
); // End of For Loop</JOURNAL>
Je pense que c'est proche de ce que tu veux.Cela peut nécessiter quelques ajustements, mais au minimum, cela devrait vous donner un bon départ sur la façon de tout assembler.
Names Default To Here( 1 );
// Delete the old Dashboard
Try( NW << close window );
dirpath = Pick Directory();
TheFileList = Files In Directory( dirpath );
// Create the Dashboard window to place the charts into
NW = New Window( "Asset Dashboard", <<JOURNAL></JOURNAL>