Hallo JMP-Community,
Dies ist mein erster Beitrag und mein erstes großes JMP-Skriptprojekt, also haben Sie bitte etwas Geduld. Dieses Forum hat mir sehr geholfen, dorthin zu gelangen, wo ich bisher bin.
Ziel: Verfügen Sie über ein JMP-Dashboard, das alle Excel-Dateien in einem Verzeichnis öffnet und analysiert und IR-Diagramme für jede Anlagennummer anzeigt. Live in dem Sinne, dass jedes Mal, wenn das Dashboard/Skript geöffnet wird, es ausgeführt wird und die Diagramme aktualisiert.
Einschränkungen: Das Layout von Excel-Berichten kann nicht geändert werden.
Unten sind meine Codeausschnitte, die unabhängig voneinander einwandfrei funktionieren. Als ich alles zusammenfügte, stürzte JMP ab.
Möglicherweise gehe ich das alles falsch an. Möglicherweise ist es einfacher, jede Datei zu öffnen und die Spalten an eine neue Datentabelle anzuhängen. Basierend auf der Anzahl der Spalten könnten X Diagramme generiert werden.
Jede Hilfe wäre sehr dankbar.
Code zum Erstellen eines Kontrolldiagramms mit Referenzlinie . Ich möchte den Wert für die Referenzlinie aus der beigefügten Tabelle abrufen Kraftbedarf Feld und Titel aus Inventarnummer Feld.
Mehr sehen... Code zum Öffnen aller Dateien im Verzeichnis , aber Dateien oder Daten müssen Kopfzeilen in Zeile 1 und Daten in Zeile 2 haben, damit sie funktionieren.
Mehr sehen...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 = Verzeichnis auswählen(); TheFileList = Dateien im Verzeichnis (dirpath); For( i = 1, i < 100, i++, dt = Open( "F:\IPC\IPC PULL TEST RECORD LOGS\" || TheFileList[i], worksheet( "Sheet1" ) ); dt << Control Chart( Beispieletikett (: Datum), Gruppengröße (1), KSigma (3), Diagrammspalte (: Zugkraftmesswert, Einzelmessung), SendToReport (Dispatch ({"Einzelne Messung des Zugkraftmesswerts"}, "2", ScaleBox , {Min( 5 ), Max( 18 ), Inc( 2 ), Minor Ticks( 1 ), Add Ref Line( 8, "Solid", "Black", "LSL", 4 )} ), Dispatch( {" Individuelle Messung der Ablesung der Zugkraft"}, "1", ScaleBox, {Min( 0 ), Max( 50 ), Inc( 8 ), Minor Ticks( 0 )} ), Dispatch( {"Individuelle Messung der Ablesung der Zugkraft" }, „IR-Diagramm von IM“, FrameBox, {Frame Size( 820, 420 )} ), Dispatch( {„Individuelle Messung der Zugkraftmessung“}, „IR-Diagramm von IM“, FrameBox( 2 ), {Frame Size ( 65, 405 )} ) ) ); );
Code zum Formatieren einer Datei durch Neuanordnen von Headern und Daten .
Mehr sehen...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 << Zeilen löschen (1::13); var = dt:column 11[2]; dt:column 11[8] = var; //data var = dt:column 11[1]; dt:column 11[7] = var; //Überschrift var = dt:column 3[1]; dt:column 12[7] = var; //Überschrift var = dt:column 3[2]; dt:Spalte 12 [8] = var; //asset # dt << delete rows (1::6); dt << spalten löschen(1,3,5,7,9,13::25); colNames = dt << Spaltennamen abrufen; For( i = 1, i <= N Items( colNames ), i++, Column( i ) << set name( Column( i )[1] ) ); dt << Zeilen löschen(1);
Jim,
Ich habe gesehen, dass Sie während meiner Recherche und Fehlerbehebung zu vielen Diskussionen beigetragen haben. Es ist mir eine große Ehre, dass Sie hier zu meiner Diskussion beitragen.
Zuerst hatte ich einige Probleme beim Ausführen des Skripts. Nachdem ich das Protokoll und den Debugger durchgesehen hatte, stellte ich fest, dass er bei einer bestimmten Datei anhielt. Die nächste Datei war eine Testdatei, die ich anders formatiert hatte. Ich habe diese Datei entfernt, das Skript und sie nicht geändert hat wunderbar funktioniert . Später hatte ich beim Ausführen des Skripts eine Datei geöffnet und erhielt eine weitere Fehlermeldung, aber das ließ sich leicht beheben (Datei schließen).
Ich beabsichtige, den gesamten Code zu verstehen, habe aber noch ein paar weitere Anpassungen vorgenommen, bei denen ich hoffentlich helfen kann:
- Ist es möglich, den LSL-Wert zum Diagramm hinzuzufügen und ihn sogar auf die gleiche Seite (rechts) wie UCL/LCL zu verschieben?
- Einige Datensätze haben eine LSL von 50+. Das passt nicht in die aktuelle Grafik, daher habe ich den Bereich auf 1–100 geändert. Gibt es eine Möglichkeit, die Zugkraftanforderung auf +/- 10 oder 20 für die Reichweite zu erhöhen?
- Einige Excel-Tabellen sind leer. Gibt es eine Möglichkeit, Diagramme wegzulassen?
Bearbeiten : Ich habe mir heute etwas Zeit genommen, die oben genannten Anpassungen hinzuzufügen, und hier ist der geänderte Code dafür. Es scheint ziemlich schwierig zu sein, das Referenzetikett zu ändern. Der einzige Hinweis, den ich gefunden habe, war, ein neues Textfeld zu erstellen und diesen Code zu verwenden. Ich bin mir jedoch nicht sicher, wie ich die Y-Höhe der Referenzlinie verknüpfen soll.
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>
Ich denke, das kommt dem nahe, was Sie wollen.Vielleicht muss man noch ein bisschen daran arbeiten, aber zumindest sollte es Ihnen einen guten Anfang geben, wie Sie das Ganze zusammensetzen können
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>