Umgehen Sie den Excel-Import-Assistenten im SkriptIch versuche, eine .xslx-Datei aus einer JMP-Anwendung heraus zu öffnen, wenn die Schaltfläche „OK“ eines Anwendungsfensters gedrückt wird. Mein Problem ist, dass es für mich schwierig ist, das Excel-Assistentenfenster zu umgehen und es einfach direkt zu öffnen.
Ich möchte, dass die Datei in JMP mit den Excel-Optionen geöffnet wird, die ich in einer Open()-Anweisung angegeben habe. Um die Optionen meiner Open()-Anweisung richtig zu machen, habe ich die Datei manuell geöffnet und die Open()-Anweisung aus dem Quellskript der Tabelle kopiert, daher denke ich, dass alle diese Optionen richtig sind. Es handelt sich um eine Excel-Datei mit mehreren Arbeitsblättern, und ich möchte nur ein Arbeitsblatt in JMP. Daher sieht mein Open()-Status wie folgt aus:
Open(
"~/Desktop/test.xlsx",
Worksheets( "Data" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
Wenn ich diese open-Anweisung in einem freistehenden Skript ausführe, passiert seltsamerweise alles wie ich möchte: Die Datei wird direkt geöffnet, ohne dass der Excel-Assistentenbereich angezeigt wird.
Wenn ich jedoch die identische Open()-Anweisung als Teil des Skripts einer JMP-Anwendung, die ich erstelle, einbinde, kann ich das Öffnen des Assistentenfensters scheinbar nicht verhindern. (Die Open()-Anweisung wird aufgerufen, wenn ich im Benutzereingabefenster meiner Anwendung auf die Schaltfläche „OK“ klicke.)
Irgendwelche Ideen, warum das passiert und wie man es stoppen kann?
Betreff: Excel-Import-Assistent im Skript umgehen@mjoner – Ja, diese Problemumgehung ist mindestens bis JMP 16.0 weiterhin erforderlich.
Betreff: Excel-Import-Assistent im Skript umgehen@danschikore Ist das hier beschriebene Verfahren immer noch die einzige Möglichkeit, dies zu erreichen? Gibt es einen Gedanken daran, die Notwendigkeit zu beseitigen, in diesem Flickschust zu schreiben, um das gewünschte Skriptverhalten zu erhalten?
Betreff: Excel-Import-Assistent im Skript umgehenDan,
Vielen Dank für dieses Follow-up. Ich hatte schließlich alles andere ausprobiert und schließlich verwendet @MS ist die Lösung, die open-Anweisung in eine Include()-Datei einzubetten. Dies erklärt, was los ist, und bietet eine andere Problemumgehung.
JohnBetreff: Excel-Import-Assistent im Skript umgehenEs stellt sich heraus, dass das Verhalten unter Windows und Mac unterschiedlich ist, was wahrscheinlich auf Unterschiede in den unterstützenden Bibliotheken zum Lesen von Excel-Dateien zurückzuführen ist.Auf einem Mac öffnet ein direkt aufgerufenes Open()-Skript die Datei wie erwartet, aber ein Open()-Aufruf, der über einen Klick auf eine Schaltfläche aufgerufen wird, ruft den Excel-Assistenten auf.
Der Workaround dafür @MS Die bereitgestellte Option zwingt JMP in den „Batch“-Modus, wodurch sich die Logik so ändert, dass sie sich so verhält, als ob das Skript direkt und nicht über eine Schaltfläche ausgeführt würde.Eine andere Möglichkeit, dies zu tun, ohne dass eine Zwischendatei erforderlich ist, besteht darin, Ihr Skript in eine ScriptBox einzubetten und <
// One way to force JMP into batch mode is to embed the script in a ScriptBox
// and invoke <<RUN on="" the="" script="" box.="" new="" window=""></RUN>
Betreff: Excel-Import-Assistent im Skript umgehenDan, Danke für die Antwort. Ich werde es ausprobieren und Ihnen separat die Anwendung zusenden, die mein Problem verursacht. Gib mir ein bisschen. JohnBetreff: Excel-Import-Assistent im Skript umgehenIch habe versucht, dieses Problem mit JMP 13/14/15 mithilfe der beigefügten JMP-Anwendung zu reproduzieren.Das Tastendruck-Skript ist unten dargestellt und öffnet die Tabelle in allen Versionen, die ich bisher ausprobiert habe, korrekt.Funktioniert dieses Beispiel für Sie?Wie unterscheidet sich dies von der Anwendung, die Sie entwickeln, und welche JMP-Version verwenden Sie?
Button1Press = Function( {this},
// This function is called when the button is pressed
Open(
"$SAMPLE_IMPORT_DATA\VA Lung Cancer.xls",
Worksheets( "VA Lung Cancer" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
);
Betreff: Excel-Import-Assistent im Skript umgehenDanke, Frau. Dies wird in Zukunft hilfreich sein. Mittlerweile habe ich eine andere Problemumgehung für meine Situation gefunden, aber es ist gut, diese für das nächste Mal im Werkzeugkasten zu haben.
Es gibt einen Abschnitt im Scripting Guide (S. 333), der die Kontextsensitivität der Open()-Funktion bespricht und sie mit dem Excel-Assistenten in Verbindung bringt, aber ich finde ihn nicht besonders klar. Ich komme zu dem Schluss, dass das hier besprochene Verhalten entweder ein Mangel (?Bug) in der Implementierung von Open() ist oder einer weiteren Dokumentation bedarf.
Eine Sache, die zum Beispiel großartig wäre, wäre eine explizite Option in Open(), ob der Assistent nicht verwendet werden soll, anstatt eine Präferenz abzugeben. Nur meine Meinung.
Betreff: Excel-Import-Assistent im Skript umgehenIch habe das auch erlebt und einen Workaround gefunden. Speichern Sie die Offen() Befehl als separates Skript ausführen und verwenden Enthalten() um den Code auszuführen.
// Create a jsl file with the Open() command
f = Save Text File(
"~/Desktop/test.jsl",
Char(
Name Expr(
Open(
"~/Desktop/test.xlsx",
Worksheets( "Data" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
)
)
);
// Invoke Open() via user input
nw = New Window( "open test", Button Box( "OK", Include( f ) ) );Betreff: Excel-Importassistenten im Skript umgehenFalls sich jemand darüber den Kopf zerbricht, hier ein alternativer Ansatz: 1. Rufen Sie die Benutzereinstellungen für die Excel-Öffnungsmethode ab und speichern Sie sie; 2. ändern Sie sie nach Bedarf; 3. öffnen Sie die Datei; 4. ändern Sie die Einstellung wieder auf die ursprüngliche Einstellung
z.B
originalPref = Einstellungen abrufen (Excel-Öffnen-Methode);
Präferenz festlegen (Excel-Öffnen-Methode („Alle Blätter öffnen“));
meinPfad = Datei auswählen(.... usw
dt = Öffnen(meinPfad…)
eval(ursprünglicher Wert)
Betreff: Excel-Importassistenten im Skript umgehenIch habe immer noch dieses Problem mit JMP 17.2 auf meinem Mac und mein Code zum Öffnen der Excel-Tabelle enthält Variablen, bei denen der Benutzer den Wert eingeben muss.