JMP コミュニティの皆様、こんにちは。
これは私にとって初めての投稿であり、初めての大規模な JMP スクリプト プロジェクトですので、ご容赦ください。
ゴール:各アセット番号の IR チャートを表示するディレクトリにあるすべての Excel ファイルを開いて解析する 1 つの JMP ダッシュボードを用意します。 ダッシュボード/スクリプトが開かれるたびに実行され、チャートが更新されるという意味で生きてください。
制約: Excel レポートのレイアウトを変更できません。
以下は、独立して問題なく動作するコードのスニペットです。 すべてをまとめると、JMP がクラッシュしました。
私はこれにすべて間違って近づいているかもしれません。 各ファイルを開いて列を新しいデータ テーブルに追加する方が簡単な場合があります。 X個のチャートを生成できる列の数に基づいています。
どんな助けでも大歓迎です。
基準線付きの管理図を作成するコード. 添付のスプレッドシートから基準線の値を取得したい力の要件フィールドとタイトル資産番号分野。
もっと見る... ディレクトリ内のすべてのファイルを開くコード、しかし、ファイルまたはデータが機能するためには、ヘッダー行 1 と行 2 から始まるデータが必要です。
もっと見る...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 = ディレクトリを選択(); TheFileList = ディレクトリ内のファイル ( dirpath ); For( i = 1, i < 100, i++, dt = Open( "F:\IPC\IPC PULL TEST RECORD LOGS\" || TheFileList[i], worksheet( "Sheet1" ) ); dt << 管理図 ( 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( {"引張力読み取りの個別測定"}, "1", ScaleBox, {Min( 0 ), Max( 50 ), Inc( 8 ), Minor Ticks( 0 )} ), Dispatch( {"引張力読み取りの個別測定" }, "IMのIRチャート", FrameBox, {Frame Size( 820, 420 )} ), Dispatch( {"引っ張り力の読み取り値の個別測定"}, "IMのIRチャート", FrameBox( 2 ), {Frame Size ( 65, 405 )} ) ) ); );
ヘッダーとデータを並べ替えて 1 つのファイルをフォーマットするコード.
もっと見る...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 << 行を削除 (1::13); var = dt: 列 11[2]; dt: 列 11[8] = var; //data var = dt:column 11[1]; dt: 列 11[7] = var; //heading var = dt:column 3[1]; dt: 列 12[7] = var; //heading var = dt:column 3[2]; dt: 列 12 [8] = var; //asset # dt << 行を削除 (1::6); dt << 列を削除します (1,3,5,7,9,13::25); colNames = dt << 列名を取得します。 For( i = 1, i <= N Items( colNames ), i++, Column( i ) << セット名( Column( i )[1] ) ); dt << 削除行 (1);
ジム、
調査やトラブルシューティングの際に、多くの議論に貢献してくださったのを見てきました。 ここで私の議論に貢献していただき、本当に光栄です。
最初、スクリプトの実行中にいくつかの問題が発生しました。 ログとデバッガーを調べたところ、特定のファイルで停止していることがわかりました。 次のファイルは、別の形式でフォーマットしたテスト ファイルです。 私はそのファイルを削除しましたが、スクリプトは変更していません。美しく働いた. 後でスクリプトを実行するときにファイルを開いたところ、別のエラーが発生しましたが、それは簡単に修正できました (ファイルを閉じます)。
私はあなたのコード全体を理解するつもりですが、さらにいくつかのカスタマイズがあり、あなたが助けてくれることを願っています:
- LSL 値をグラフに追加し、UCL/LCL と同じ側 (右) に移動することはできますか?
- 一部のデータ セットには、50+ の LSL があります。 これは現在のグラフに適合しないため、範囲を 1 ~ 100 に変更しました。 引っ張り力の要件を取得し、それを範囲で +/- 10 または 20 に使用する方法はありますか?
- 一部の Excel シートが空です。 グラフを省略する方法はありますか?
編集: 今日は時間をかけて上記のカスタマイズを追加しました。これが上記の変更されたコードです。 参照ラベルを変更するのはかなり難しいようです。 私が見つけた唯一のヒントは、新しいテキストボックスを作成してそのコードを使用することでしたが、参照線の Y 高さをリンクする方法がわかりません。
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>
これはあなたが望むものに近いと思います。微調整が必要かもしれませんが、少なくとも、これをすべてまとめる方法について良いスタートを切ることができます。
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>