Re : Combo Box GUI basé sur deux colonnes liéesVous devez ajouter une fonction (ou un script) pour limiter les options dans la deuxième zone de liste déroulante. Une option ci-dessous (je pense que cela devrait fonctionner avec JMP14)
Names Default To Here(1);
v1 = "";
v2 = "";
dt = Open("$DOWNLOADS/JMP_Question.xlsx", Worksheets("Sheet1"), invisible);
Summarize(dt, uniqvals = by(:Column 1));
aa_options = Associative Array();
For(i = 1, i <= N Items(uniqvals), i++,
col1_idx = dt << Get Rows Where(:Column 1 == uniqvals[i]);
col2_vals = dt[col1_idx, "Column 2"];
aa_options[uniqvals[i]] = col2_vals;
);
nw = New Window("Set the Value",
Lineup Box(N Col(2),
Text Box("Col1"),
cb1 = Combo Box(uniqvals, << set function(function({this},
cb2_vals = aa_options[(this << get selected)];
cb2 << Set Items(cb2_vals);
)), << Set(1)
),
Text Box("Col2"),
cb2 = Combo Box(aa_options[uniqvals[1]])
),
H List Box(
Button Box("OK",
v1 = cb1 << get selected;
v2 = cb2 << get selected;
nw << close window;
show(v1, v2);
),
Button Box("Cancel", nw << close window)
)
);
Re : Combo Box GUI basé sur deux colonnes liéesMerci Jarmo ! Vous l'avez fait paraître facile. 
Ça a marché.
Re : Combo Box GUI basé sur deux colonnes liéesBonjour Jarmo,
Un autre problème que j'ai rencontré avec la boîte de dialogue est de prendre une liste comme entrée.
Si j'utilise le code suivant.
Names Default To Here(1);
v1 = "";
v2 = "";
dt = Open("JMP_Question.xlsx", Worksheets("Sheet1"), invisible);
Summarize(dt, uniqvals = by(:Column 1));
aa_options = Associative Array();
For(i = 1, i <= N Items(uniqvals), i++,
col1_idx = dt << Get Rows Where(:Column 1 == uniqvals[i]);
col2_vals = dt[col1_idx, "Column 2"];
aa_options[uniqvals[i]] = col2_vals;
);
nw = New Window("Set the Value",
Lineup Box(N Col(2),
Text Box("Col1"),
cb1 = Combo Box(
uniqvals,
<<SET function=""></SET>
Il ne prend pas la liste comme entrée. Est-ce que je fais quelque chose de mal?
Merci!
Re : Combo Box GUI basé sur deux colonnes liéesMême si JMP vous permet de mettre la liste dans la zone de texte (je ne sais pas pourquoi, je pense que cela devrait générer une erreur), il s'agit toujours d'une chaîne (JMP effectue très probablement une conversion dessus), vous ne pouvez donc pas la référencer directement avec index.
Vous pouvez soit le diviser en liste à l'aide de mots (et peut-être remplacer pour supprimer les caractères supplémentaires tels que les crochets) ou l'analyser () dans une liste
Names Default To Here(1);
nw = new window("",
tb = Text Edit Box({"list1", "list2", "list3"}),
);
tb_txt = tb << get text;
show(tb_txt);
show(type(tb_txt));
show(Parse(tb << get text));
show(type(Parse(tb << get text)));Re : Combo Box GUI basé sur deux colonnes liéesBonjour Jarmo,
Si j'essaie d'appliquer la solution à trois colonnes, cela fonctionne. Cependant, je ne suis pas en mesure de créer une sélection unique basée sur les première ET deuxième colonnes.
Names Default To Here(1);
v1 = "";
v2 = "";
v3 = "";
dt = Open("JMP_Question.xlsx", Worksheets("Sheet1"), invisible);
Summarize(dt, uniqvals_1 = by(:Column 1));
Summarize(dt, uniqvals_2 = by(:Column 2));
Summarize(dt, uniqvals_3 = by(:Column 2,:Column 3));
aa_options = Associative Array();
For(i = 1, i <= N Items(uniqvals_1), i++,
col1_idx = dt << Get Rows Where(:Column 1 == uniqvals_1[i]);
col2_vals = dt[col1_idx, "Column 2"];
aa_options[uniqvals_1[i]] = col2_vals;
);
ab_options = Associative Array();
For(i = 1, i <= N Items(uniqvals_2), i++,
col2_idx = dt << Get Rows Where(:Column 2 == uniqvals_2[i]);
col3_vals = dt[col2_idx, "Column 3"];
ab_options[uniqvals_2[i]] = col3_vals;
);
/*
ac_options = Associative Array();
For(i = 1, i <= N Items(uniqvals_1), i++,
col1_idx = dt << Get Rows Where(:Column 1 == uniqvals_1[i]);
col2_vals = dt[col1_idx, "Column 2"];
For(j=1, j<=N Items(uniqvals_2),j++
col2_idx = dt << Get Rows Where(:Column 2 == uniqvals_2[j]);
col3_vals = dt[col2_idx, "Column 3"];
ac_options[uniqvals_2[j]] = col3_vals;
);
);
*/
print(ac_options);
nw = New Window("Set the Value",
Lineup Box(N Col(2),
Text Box("Col1"),
cb1 = Combo Box(uniqvals_1, << set function(function({this},
cb2_vals = aa_options[(this << get selected)];
cb2 << Set Items(cb2_vals);
)), << Set(1)
),
Text Box("Col2"),
cb2 = Combo Box(uniqvals_2, << set function(function({this},
cb3_vals = ab_options[(this << get selected)];
cb3 << Set Items(cb3_vals);
)), << Set(1)
),
Text Box("Col3"),
cb3 = Combo Box(ab_options[uniqvals_2[1]])
),
H List Box(
Button Box("OK",
v1 = cb1 << get selected;
v2 = cb2 << get selected;
v3 = cb3 << get selected;
nw << close window;
show(v1, v2, v3);
),
Button Box("Cancel", nw << close window)
)
);Le code ci-dessus fonctionne. Cependant, si vous regardez les images ci-jointes, je ne suis pas en mesure de créer des listes uniques pour Col2 et Col3.
Il y a probablement une solution simple qui me manque.
Merci!
Re : Combo Box GUI basé sur deux colonnes liéesVous pouvez créer une nouvelle colonne qui est une combinaison de :Column 1 et :Column 2 et l'utiliser pour les clés
Combo Box GUI basé sur deux colonnes liéesBonjour,
Si j'ai deux colonnes dans un fichier, je peux créer une zone de liste déroulante en utilisant les deux colonnes séparément (voir le fichier JSL joint). Cependant, ce que je veux vraiment, c'est qu'une fois que j'ai sélectionné la première option (disons "a"), cela devrait limiter mes deuxièmes options de boîte à "a1", "a2" et "a3" uniquement. Voir le fichier Excel joint.
Toute aide serait appréciée.
v1 = "m";
v2 = "n";
dt = Open("JMP_Question.xlsx", Worksheets("Sheet1"), invisible);
subDt1 = dt << Subset(Columns(:Column 1), invisible);
Summarize(col1_unique_vals = by(Column 1));
subDt2 = dt << Subset(Columns(:Column 2), invisible);
Summarize(col2_unique_vals = by(Column 2));
win = New Window("Set the Value",
H List Box(Text Box("Col1"), combo_box1 = Combo Box(col1_unique_vals)),
H List Box(Text Box("Col2"), combo_box2 = Combo Box(col2_unique_vals)),
H List Box(
Button Box("OK",
v1 = combo_box1 << get selected;
v2 = combo_box2 << get selected;
win << close window;
),
//a cancel button that closes the window and doesn't store store the results
Button Box("Cancel", win << close window)
)
);
Version JMP - JMP Pro 14
Automatisation et scriptIngénierie de la qualité et des procédés