Ignora l'importazione guidata di Excel nello scriptSto cercando di aprire un file .xslx dall'interno di un'applicazione JMP quando viene premuto il pulsante "OK" di una finestra dell'applicazione. Il mio problema è che trovo difficile aggirare la finestra della procedura guidata di Excel e aprirla direttamente.
Voglio che il file si apra in JMP utilizzando le opzioni di Excel specificate in un'istruzione Open(). Per ottenere le opzioni dell'istruzione Open() corrette, ho aperto il file manualmente e ho copiato l'istruzione Open() dallo script Source della tabella, quindi penso che tutte queste opzioni siano corrette. È un file excel con più fogli di lavoro e voglio solo un foglio di lavoro in JMP, quindi ecco come appare il mio stato Open():
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( "-" )
)
)
Stranamente, quando eseguo questa istruzione aperta in uno script indipendente, tutto accade come voglio: il file si apre direttamente senza che il riquadro della procedura guidata di Excel venga visualizzato.
Tuttavia, quando includo l'identica istruzione Open() come parte dello script di un'applicazione JMP che sto costruendo, non riesco a impedire l'apertura del riquadro della procedura guidata. (L'istruzione Open() viene chiamata quando faccio clic sul pulsante "OK" della finestra di input dell'utente della mia applicazione.)
Qualche idea sul perché questo sta accadendo e su come fermarlo?
Ri: Bypassare la procedura guidata di importazione di Excel nello script@mjoner - Sì, questa soluzione alternativa è ancora necessaria almeno tramite JMP 16.0.
Ri: Bypassare la procedura guidata di importazione di Excel nello script@danschikore La procedura a cui si fa riferimento qui è ancora l'unico modo per ottenere questo risultato? Si pensa di rimuovere la necessità di scrivere in questo kludge per ottenere il comportamento di scripting desiderato?
Ri: Bypassare la procedura guidata di importazione di Excel nello scriptDan,
Grazie per questo seguito. Alla fine avevo provato tutto il resto e ho finito per usare @SM la soluzione di incorporare l'istruzione open all'interno di un file Include(). Questo spiega cosa sta succedendo e fornisce una soluzione diversa.
JohnRi: Bypassare la procedura guidata di importazione di Excel nello scriptSi scopre che il comportamento è diverso su Windows e Mac, probabilmente a causa delle differenze nelle librerie di supporto per la lettura dei file Excel.Su Mac, uno script Open() chiamato direttamente aprirà il file come previsto, ma una chiamata Open() richiamata da un clic del pulsante farà apparire la procedura guidata di Excel.
La soluzione alternativa @SM provided forza JMP in modalità "batch", che modifica la logica in modo che si comporti come se lo script fosse eseguito direttamente invece che tramite un pulsante.Un altro modo per fare ciò che non richiede un file intermedio è incorporare lo script in uno ScriptBox e invocare <
// 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>
Ri: Bypassare la procedura guidata di importazione di Excel nello scriptDan, grazie per aver risposto. Lo proverò e ti invierò separatamente l'applicazione che causa il mio problema. Dammi un po'. JohnRi: Bypassare la procedura guidata di importazione di Excel nello scriptHo provato a riprodurre questo problema con JMP 13/14/15 utilizzando l'applicazione JMP allegata.Lo script di pressione del pulsante è mostrato di seguito e apre correttamente la tabella in tutte le versioni che ho provato finora.Questo esempio funziona per te?In che modo differisce dall'applicazione che stai sviluppando e quale versione di JMP stai utilizzando?
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( "-" )
)
)
);
Ri: Bypassare la procedura guidata di importazione di Excel nello scriptGrazie, signorina Questo sarà utile in futuro. Nel frattempo, ho escogitato una soluzione diversa per la mia situazione, ma è utile averlo nella cassetta degli attrezzi per la prossima volta.
C'è una sezione nella Guida allo scripting (p. 333) che discute la sensibilità al contesto della funzione Open() e la mette in relazione con la procedura guidata di Excel, ma non la trovo molto chiara. Non posso fare a meno di pensare che il comportamento qui discusso sia un difetto (?bug) nell'implementazione di Open(), oppure necessiti di più documentazione.
Ad esempio, una cosa che sarebbe ottima è un'opzione esplicita in Open() per decidere se non utilizzare la procedura guidata, invece di disattivare una preferenza. Solo i miei due centesimi.
Ri: Bypassare la procedura guidata di importazione di Excel nello scriptHo anche sperimentato questo e ho trovato una soluzione alternativa. Salva il Aprire() comando come uno script separato e utilizzare Includere() per eseguire il codice.
// 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 ) ) );Re: Bypassare la procedura guidata di importazione di Excel nello scriptNel caso qualcuno si stesse chiedendo, ecco un approccio alternativo: 1. ottenere e memorizzare la preferenza utente per il metodo di apertura di Excel; 2. modificarla in base alle proprie esigenze; 3. aprire il file; 4. modificare nuovamente l'impostazione in base a quella precedente.
per esempio
originalPref = Ottieni preferenze (metodo di apertura di Excel);
Imposta preferenza(Metodo di apertura di Excel("Apri tutti i fogli"));
myPath = Seleziona file(.... ecc.
dt = Open(mioPercorso...)
eval(originalePref)
Re: Bypassare la procedura guidata di importazione di Excel nello scriptHo ancora questo problema con JMP 17.2 sul mio Mac e il mio codice per aprire il foglio Excel contiene variabili che richiedono all'utente di immettere il valore.